当你通过onChange在DOM中指定一个函数(带或不带参数)时,你只能使用静态参数。 E.g。
<select id="blah" onChange="doSomething(3);">
但是,jQuery允许您为事件处理程序动态定义和分配函数,例如“更改”。
请参阅以下示例:
function addRow(customObject) {
<< Create TR containing a select named "#someSelect + customObject.id" >>
// Demo
$("#someSelect" + customObject.id).change(function() {
changeSomething(customObject)
});
}
我的问题是 - 基本上 - 这会有效吗?我正在使用特定的实例o f我的jQuery更改事件处理程序中的对象。 customObject的特定实例(无论它位于何处)是否始终绑定到此事件处理程序回调?
customObject在加载时初始化,是众多之一。对于那个特定的选择框,我总是希望它链接到该对象。
jQuery新手。提前谢谢。
编辑:
我有几排物品。每个都由一个对象表示。我只是想确保当有人通过HTML修改其中一行时,底层对象(绑定到回调函数)已正确更新。
我正在寻找这样的东西,概念上是:
之间的映射Row 1 - customObject1
Row 2 - customObject2
Row 3 - customObject3
...如果我在第3行修改其中一个HTML元素(例如更改选择框),那么在后台修改customObject3
答案 0 :(得分:1)
如果在添加侦听器之前定义了customObject.id
,并且您希望侦听器本身绑定到该特定元素而不移动它,那么您将使用的是什么。
根据您的问题,我了解customObject.id
是动态的,因为可以更改其值,并且根据此值,侦听器可以侦听不同的元素。在这种情况下,您必须使用更通用的选择器并检查侦听器本身内部的值:
$('select').on('change', function(e) {
if(this.id === 'someSelect' + customObject.id)
return myCallback(e);
});
编辑:
问题在于访问侦听器内的customObject
。它使用当前内容,而不是添加侦听器时使用的内容。
我知道的最简单的解决方法是:
var select = $("#someSelect" + customObject.id);
select.customObject = customObject; /* save customObject to the select itself */
select.on('change', function() {
changeSomething(this.customObject); /* don't use global object but its own */
});