【发布时间】:2011-03-02 10:24:52
【问题描述】:
TLDR
- 在 chrome 中检查此 example。
- 键入 someting 并按
tab。看到一个新框出现 - 键入内容并按
enter。看到两个新框出现,其中一个是预期的。
简介
我注意到,当使用enter 而不是tab 更改字段时,我在输入字段上的 onchange 函数触发了两次。这个页面相当大,并且仍在开发中(阅读:许多其他错误),所以我做了一个显示这种行为的最小示例,在这种情况下它甚至在“选项卡”上进行。据我所知,这只是 Chrome 中的一个问题。
应该怎么做
在输入字段中输入内容后,我想进行新的输入。该字段应获得焦点。
示例:
javascript - 需要 jquery
function myOnChange(context,curNum){
alert('onchange start');
nextNum = curNum+1;
$(context.parentNode).append('<input type="text" onchange="return myOnChange(this,'+nextNum+')" id="prefix_'+nextNum+'" >');
$('#prefix_'+nextNum).focus();
return false;
}
HTML 部分
<div>
<input type="text" onchange="return myOnChange(this,1);" id="prefix_1">
</div>
完整的代码是on pastebin。你需要在脚本中添加你的 jquery 路径
jFiddle 上有一个工作示例
onchange 被调用两次:调用myOnChange 函数,进行新输入,调用focus(),再次调用myOnChange,进行新输入,“内部”myOnChange 退出并然后'外部'myOnchange 退出。
我假设这是因为焦点更改触发了onchange()?。我知道在这方面浏览器之间的行为存在一些差异。
我想停止 .focus()(这似乎是问题所在)不调用 onchange(),因此 myOnChange() 不会被调用两次。有人知道怎么做吗?
【问题讨论】:
标签: javascript jquery google-chrome focus onchange