我有一段JavaScript为我构建了一些HTML,并将它插入div
。我正在使用jQuery 1.7.2进行此测试。如何正确捕获动态插入的“输入”文本元素的onchange或onkeyup事件?
我有兴趣在名为gene_autocomplete_field
的input
文本字段上附加自定义更改或键盘事件处理程序。
这是我到目前为止尝试过的。
下面的函数构建HTML,这是插入div
称为gene_container
:
function buildGeneContainerHTML(count, arr) {
var html = "";
// ...
html += "<input type='text' size='20' value='' id='gene_autocomplete_field' name='gene_autocomplete_field' placeholder='Enter gene name...' /><br/>";
// ...
return html;
}
// ...
$('#gene_container').html(buildGeneContainerHTML(count, geneNameArr));
在我的呼唤HTML,我抓住从gene_container
元素gene_autocomplete_field
,然后我重写了keyup
事件处理程序gene_autocomplete_field
:
<script>
$(document).ready(function() {
$("#gene_container input:[name=gene_autocomplete_field]").live('keyup', function(event) {
refreshGenePicker($("#gene_container input:[name=gene_autocomplete_field]").val());
});
});
</script>
当我改变gene_autocomplete_field
文本中,refreshGenePicker()
函数J乌斯季发出警报:
function refreshGenePicker(val) {
alert(val);
}
结果
如果我输入任何字母到gene_autocomplete_field
元素,事件处理似乎需要alert(val)
的无数次。我收到了一个接一个的警报,浏览器被对话框接管。返回的值是正确的,但我担心refreshGenePicker()
一遍又一遍地被调用。这不是正确的行为,我不认为。
问题
- 如何正确采集
keyup
事件一次,所以我只处理内容的变化来自动完成视野中的一个时间? - 我应该为此使用不同的事件吗?
UPDATE
事实证明,不仅仅是一个keyCode
13(Return/Enter键)可以是一个问题 - 按下Control,Alt键,Esc键或其它特殊字符将触发事件(但就无限循环问题而言,将是无症状的)。我筛选的基因名称中没有元字符。所以我做了使用alphanumeric detection test的滤除进一步处理事件,其中包括返回键非字母数字字符:
if (!alphaNumericCheck(event.keyCode)) return;
看来.live被贬损赞成.on http://api.jquery.com/live/ – 2012-04-01 13:17:33
你介意发布[小提琴](http://jsfiddle.net) – 2012-04-01 13:19:34