将对象的绑定函数与jQuery'更改'事件处理程序

时间:2014-06-18 20:13:28

标签: javascript jquery

当你通过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

1 个答案:

答案 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 */
});