jQuery与对象的绑定函数'事件处理程序
binding functions with objects to jQuery 'change' event handler
当您通过onChange在DOM中指定一个函数(带或不带参数)时,您只能使用静态参数。例如
<select id="blah" onChange="doSomething(3);">
然而,jQuery允许你动态地定义和分配函数给事件处理程序,比如'change'。
请看下面的例子:
function addRow(customObject) {
<< Create TR containing a select named "#someSelect + customObject.id" >>
// Demo
$("#someSelect" + customObject.id).change(function() {
changeSomething(customObject)
});
}
我的问题是——本质上——这能行吗?我使用一个特定的实例0在我的jQuery更改事件处理程序中的一个对象。customObject的特定实例(无论它位于何处)是否总是绑定到此事件处理程序回调?
customObject在加载时初始化,是众多对象中的一个。对于那个特定的选择框,我总是希望它链接到那个对象。
jQuery新功能。提前谢谢。
编辑:我有几行项目。每个都由一个对象表示。我只是想确保当有人通过HTML修改其中一行时,底层对象(绑定到回调函数)被正确更新。
我正在寻找这样的东西,概念上是映射:
Row 1 - customObject1
Row 2 - customObject2
Row 3 - customObject3
…这样,如果我修改第3行中的一个HTML元素(例如改变选择框),在幕后,customObject3被修改
如果在添加侦听器之前定义了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 */
});
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在jQuery事件处理程序中存储和重用超时
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 异步处理所有事件处理程序的方法
- jsplumb中的Click事件处理程序丢失“;这个“;对象
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 如何在事件处理程序的回调中防止Default