函数在" $(function(){"但不在外面?

时间:2015-05-10 20:55:32

标签: javascript jquery html css

这是函数的样子:

function changeWidth(el,event) {

        event.preventDefault();

        if($('#RightSide').is(':visible')){
           $('#RightSide').delay(1000).fadeOut(0);            
        }
        else{
           $('#RightSide').fadeIn(0);
        }


        var toggleWidth = $("#LeftPanel").width() == 365 ? "1096px" : "365px";
        /* $('#LeftPanel').width(toggleWidth);*/
        $('#LeftPanel').animate( {'width': toggleWidth}, 1000);  

        if($('#LeftPanel').is('.LeftPanelRadius')){
            $('#LeftPanel').removeClass('LeftPanelRadius'); return;
        }

        $('#LeftPanel').addClass('LeftPanelRadius');

    } 

当有人点击我网站上的图片时,它应该激活。以下是HTML代码:

<img src="images/magCircy.png" width="33px" height="33px" onClick="changeWidth(this,event);"></img>      

jQuery和HTML代码工作得很好,但它只适用于jQuery代码是OUTSIDE,这是我所有其他功能所在的一般事项:

$(function() {

});      

我之所以试图将它移动到里面这一般的东西,是因为我希望函数changeWidth调用另一个函数来处理那个普通的东西。而且我假设你只能从也在其中的函数调用那些一般内容中的函数。

...对不起,如果这听起来很复杂......如果你能提供帮助,请告诉我。

谢谢。

2 个答案:

答案 0 :(得分:1)

  

我假设你只能从里面的函数中调用那些一般内容中的函数。

这正是你的问题。你试图从外面调用你的处理程序。

这不是“一般事物”;这是一个普通函数,您将$()函数作为参数传递给它。

你不应该在另一个函数中声明一个函数,除非它只被那个函数使用。

答案 1 :(得分:1)

是的,让我们打破这个。

您的元素包含onclick事件的处理程序。就HTML元素而言,它正在function changeWidth对象a.k.a.全局范围内寻找window

您还在$(function(...));中定义了代码,该代码本身就是一个函数,因此其中的任何内容都在其自己的本地范围内。

当你的元素触发它的点击事件时,它只知道检查window changeWidth

解决这个问题的方法(虽然我不建议),就是在你的jQuery函数中创建一个指针:

$(function () {
    window.changeWidth = function () { /*code*/ };
});

我建议在这里使用jQuery,因为它听起来像是一大堆代码写在其中。这看起来像是:

$(function() {
    $('img[src="images/magCircy.png"]').on( 'click', function() {
         //your code here
    });
});

或者,您可以直接将changeWidth函数直接传递给上面的onClick处理程序。

编辑:关闭我的大括号:)