正如标题所述,我有一个一般性问题。我只是不确定我所做的是否正确,或者是否有更简单的方法来保持对象的范围。
我在这里有一个例子来说明我正在使用什么。您可以看到我通过参数将“this”对象传递给函数,但这是唯一的方法吗?有没有办法我不需要传递参数。
请注意,标准是表格上没有识别类/ID。
谢谢。
正如标题所述,我有一个一般性问题。我只是不确定我所做的是否正确,或者是否有更简单的方法来保持对象的范围。
我在这里有一个例子来说明我正在使用什么。您可以看到我通过参数将“this”对象传递给函数,但这是唯一的方法吗?有没有办法我不需要传递参数。
请注意,标准是表格上没有识别类/ID。
谢谢。
根据您的示例,有更简单的方法:
$("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
}
也会这样做。小提琴
至于更复杂的函数,将元素传递给函数通常不是问题,而且在我看来它比使用全局更好。
您可以使用标准绑定函数显式设置上下文
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind
或者 jquery 中的类似等价物(如果有的话)(我不确定)
这是一种有效的方法——另一种方法是在更高的范围内声明变量,在第一个函数中分配它,并在不需要在第二个函数中使用参数的情况下引用它。
例如,请参阅对您的 JSFiddle的此编辑。
您可以使用窗口对象,通过将变量声明为分数,然后设置它的窗口对象。
$("form select").change(function() {
window.thisObj = $(this).parent("form");
changeText();
});
function changeText() {
window.thisObj.find("input").val("Changed!");
}
但是你这样做的方式是正确的,应该始终避免使用窗口对象。
我认为这种方法没有任何问题......非常好:)
但是,如果你仍然想知道其他方式,那么有很多......我会在这里发布几个......
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
}