Ian*_*ell 3 jquery event-handling
我处理两个事件,都focusout和keydown,在$(elementID).on()事件处理程序.
作为事件处理程序中的最后一行
调用似乎是部分工作 - 正常工作,但是发射两次.
$(elementID).off("focusout keydown");.on()focusoutkeydown
@Barmar的调查结果,keydown首先触发focusout和再 keydown.这种情况在Firefox 22中发生,但显然不在Chrome 29中.
<input type = "text" id = "textField" />
<input type = "button" onclick = "setFocus();" value = "click here" />
<ol>
<li>Type some text into the textfield.</li>
<li>Click the button.</li>
<li>
Click out of the textfield, or
<br />
<i>press enter for some weird behavior.</i>
</li>
</ol>
Run Code Online (Sandbox Code Playgroud)
...这里是javascript/jQuery:
function setFocus() {
$("#textField").focus();
$("#textField").select();
var count = 1;
$("#textField").on("focusout keydown", function(e) {
// if clicked away, or the enter key is pressed:
if (e.type == "focusout" || e.keyCode == 13) {
alert(e.type + ": " + count++);
}
// this doesn't seem to be working correctly:
$("#textField").off("focusout keydown");
});
}
Run Code Online (Sandbox Code Playgroud)
......这里是jsFiddle.
从我可以推断出,当你按Enter键时,keydown事件被触发警报打开keydown,然后触发焦点输入默认功能,然后警告焦点输出.所以,你必须做的是解除绑定的事件的内容按下ENTER键
$("#textField").on("focusout keydown", function (e) {
if (e.type == "focusout" || e.keyCode == 13) {
if(e.keyCode == 13){
$(this).unbind('focusout');
}
alert(e.type + ": " + count++);
}
$("#textField").off("focusout keydown");
});
Run Code Online (Sandbox Code Playgroud)
这是编辑过的JsFiddle
| 归档时间: |
|
| 查看次数: |
4908 次 |
| 最近记录: |