0

正如标题所述,我有一个一般性问题。我只是不确定我所做的是否正确,或者是否有更简单的方法来保持对象的范围。

我在这里有一个例子来说明我正在使用什么。您可以看到我通过参数将“this”对象传递给函数,但这是唯一的方法吗?有没有办法我不需要传递参数。

请注意,标准是表格上没有识别类/ID。

http://jsfiddle.net/TmaHs/

谢谢。

4

5 回答 5

2

根据您的示例,有更简单的方法:

$("form select").on('change', changeText);

function changeText(e) { //the event is still available
    $("input", e.target.form).val("Changed!"); //so is the target and the form
}

也会这样做。小提琴

至于更复杂的函数,将元素传递给函数通常不是问题,而且在我看来它比使用全局更好。

于 2012-08-02T15:06:41.433 回答
1

您可以使用标准绑定函数显式设置上下文

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind

或者 jquery 中的类似等价物(如果有的话)(我不确定)

于 2012-08-02T15:01:08.803 回答
0

这是一种有效的方法——另一种方法是在更高的范围内声明变量,在第一个函数中分配它,并在不需要在第二个函数中使用参数的情况下引用它。

例如,请参阅对您的 JSFiddle的此编辑。

于 2012-08-02T15:01:33.757 回答
-1

您可以使用窗口对象,通过将变量声明为分数,然后设置它的窗口对象。

$("form select").change(function() {
    window.thisObj = $(this).parent("form");
    changeText(); 
});

function changeText() {
    window.thisObj.find("input").val("Changed!");   
}

​ 但是你这样做的方式是正确的,应该始终避免使用窗口对象。

于 2012-08-02T15:02:10.520 回答
-1

我认为这种方法没有任何问题......非常好:)

但是,如果你仍然想知道其他方式,那么有很多......我会在这里发布几个......

1) 在选择器函数中检索您需要的所有值,并将它们传递给函数。

$("form select").change(function() {
    var val1 = $("selector1").val();
    var val1 = $("selector2").val();
    var val1 = $("selector3").val();

   changeText(val1,val2,val3); 
});

function changeText(val1,val2,val3) {
// your operation
}

2)将所需的值添加到数组中,并将该数组传递给您的目标函数。

var targetArray = new Array();
    $("form select").change(function() {
       targetArray[0]=//your val1
       targetArray[1]=//your val2
       targetArray[2]=//your val3

       changeText(targetArray); 
    });

    function changeText(arr) {
    // your operation
    }
​
于 2012-08-02T15:06:29.337 回答