Javascript 在事件处理程序上重新加载Jquery.on
我有一张有输入的表格。用户可以启动类型,JQuery脚本()自动完成用户文本 用户还可以使用简单的JavaScript createElement和innerHTML函数向表中添加新输入 当用户添加新输入时,问题就出现了,因为JQuery没有注册新输入,因此它没有附加事件处理程序来自动完成用户文本 一个可能有效的解决方案是JQuery.delegate()函数 编辑(添加源代码):Javascript 在事件处理程序上重新加载Jquery.on,javascript,jquery,html,Javascript,Jquery,Html,我有一张有输入的表格。用户可以启动类型,JQuery脚本()自动完成用户文本 用户还可以使用简单的JavaScript createElement和innerHTML函数向表中添加新输入 当用户添加新输入时,问题就出现了,因为JQuery没有注册新输入,因此它没有附加事件处理程序来自动完成用户文本 一个可能有效的解决方案是JQuery.delegate()函数 编辑(添加源代码): 无法从JSFIDLE获取正确格式的代码 委托事件处理程序的优点是可以处理 来自子元素的事件,这些子元素以 稍后。
无法从JSFIDLE获取正确格式的代码
委托事件处理程序的优点是可以处理
来自子元素的事件,这些子元素以
稍后。通过选择在附加委派事件处理程序时保证存在的元素,您可以使用委派事件来避免频繁附加和删除事件处理程序
然后,您只需更改以下示例以匹配您拥有的元素:
$( "#dataTable tbody" ).on( "click", "tr", function() {
console.log( $( this ).text() );
});
从
委托事件处理程序的优点是可以处理
来自子元素的事件,这些子元素以
稍后。通过选择在附加委派事件处理程序时保证存在的元素,您可以使用委派事件来避免频繁附加和删除事件处理程序
然后,您只需更改以下示例以匹配您拥有的元素:
$( "#dataTable tbody" ).on( "click", "tr", function() {
console.log( $( this ).text() );
});
您需要使用委托事件来处理新添加的元素
比如:
$(document).on("keydown", "tr input", function() {})
您需要使用委托事件来处理新添加的元素
比如:
$(document).on("keydown", "tr input", function() {})
通常,在不存在的元素上绑定事件是通过委托来处理的,在委托中,绑定父元素并依赖于绑定后创建的任何子元素上的事件,通过向上冒泡到父元素来工作,然后父元素可以调用回调
对于jQueryUIAutoComplete插件,它是通过其实现的接口将Autocomplete应用于元素来实现的,该接口对正在使用它的元素进行自己的绑定
在本例中,在添加新DOM元素的地方,我们定义了一个函数,该函数处理在传递给它的任何元素上绑定自动完成功能,并更新创建新元素的代码,以便在创建后调用该函数以应用自动完成绑定
这方面的工作演示在中,并在此处复制:
添加输入
第一个输入有效。自动完成功能可以完全工作,但当您添加新输入时,新输入不会注册到事件处理程序。
$(函数(){
var availableTags=[
“是”、“否”,
];
功能拆分(val){
返回val.split(/,\s*/);
}
功能提取最后(学期){
返回拆分(term.pop();
}
window.setupAutocomplete=函数($obj){
返回$obj
//选择项目时不要离开选项卡上的字段
.on(“按键按下”),功能(事件){
如果(event.keyCode===$.ui.keyCode.TAB&&
$(this.autocomplete(“实例”).menu.active){
event.preventDefault();
}
})
.自动完成({
最小长度:0,
来源:功能(请求、响应){
//委托回自动完成,但提取最后一项
响应($.ui.autocomplete.filter(
availableTags,extractLast(request.term));
},
焦点:函数(){
//防止在焦点上插入值
返回false;
},
选择:功能(事件、用户界面){
var术语=分割(该值);
//删除当前输入
terms.pop();
//添加所选项目
术语推送(ui.item.value);
//添加占位符以在末尾获得逗号和空格
术语。推送(“”);
this.value=terms.join(“”);
返回false;
}
});
};
设置自动完成($(“.input1”);
});
函数addInputs(){
var div=document.createElement('tr');
div.innerHTML=\
\
\
\
';
setupAutocomplete($('input',div));
document.getElementsByClassName('addInput')[0].appendChild(div);
}
通常,在不存在的元素上绑定事件是通过委托来处理的,在委托中,您绑定父元素并依赖绑定后创建的任何子元素上的事件通过向上冒泡到父元素来工作,然后父元素可以调用回调
对于jQueryUIAutoComplete插件,它是通过其实现的接口将Autocomplete应用于元素来实现的,该接口对正在使用它的元素进行自己的绑定
在本例中,在添加新DOM元素的地方,我们定义了一个函数,该函数处理在传递给它的任何元素上绑定自动完成功能,并更新创建新元素的代码,以便在创建后调用该函数以应用自动完成绑定
这方面的工作演示在中,并在此处复制:
添加输入
第一个输入有效。自动完成功能可以完全工作,但当您添加新输入时,新输入不会注册到事件处理程序。