我想在表单字段中捕获“enter”和“blur”。如果我点击“输入”和“标签”,它也会触发模糊事件......只有一个触发器,所以“或”不是“和”。
$('#login-input-password').bind('blur keypress', function(e){
if (e.type == 'blur' || e.keyCode == 13) {
// do something only once, not twice
// e.g., if I hit "[enter"] and tab to blur, I don't want it to call twice...
}
});
功能用法
function bindTriggerEnterOrBlur(selector,myFunction)
{
$(selector).bind('blur keypress', function(e){
if (e.type == 'blur' || e.keyCode == 13) {
if (!$(selector).data('has-triggered')) {
$(selector).data('has-triggered', true);
// do something only once, not twice
myFunction();
// e.g., if I hit "[enter"] and tab to blur, I don't want it to call twice...
}
}
});
$(selector).bind('focus', function(e){
$(selector).data('has-triggered', false);
$(selector).select();
});
}
致电功能
bindTriggerEnterOrBlur('#login-input-email',submitLoginEmail);
其中submitLoginEmail是为触发器执行某些操作的函数,例如,
function submitLoginEmail()
{
// submit on enter...
var email = $("#login-input-email").val();
if(validEmail(email))
{
submitNextLogin();
}
}
答案 0 :(得分:1)
如果我的要求正确,你只需执行一次回调,但目前它已被执行两次。
如果是这种情况,那么你需要一些方法来表明是否已经调用了回调。
一种方法是使用数据属性
$('#login-input-password').bind('blur keypress', function(e){
if (e.type == 'blur' || e.keyCode == 13) {
if (!$(this).data('done') {
$(this).data('done', true);
// do something only once, not twice
// e.g., if I hit "[enter"] and tab to blur, I don't want it to call twice...
}
}
});
您还需要另一个事件处理程序来重置元素的done属性
$('#login-input-password').bind('focus', function(e) {
$(this).data('done', false);
});
答案 1 :(得分:0)
你正在做一个OR。你想要一个XOR(异或),必须使用比较组合来完成。
if (( (e.type == 'blur') && !(e.keyCode == 13)) ||
(!(e.type == 'blur') && (e.keyCode == 13))) {
// do something only once, not twice
// e.g., if I hit "[enter"] and tab to blur, I don't want it to call twice...
}
您希望阻止脚本再次触发,因此您需要进行更多状态比较,以确保您的异步事件处理程序知道blur
或keypress
事件已发生且确保处理程序不会运行两次。
答案 2 :(得分:0)
您还可以执行以下操作:
var doo = function(e){ console.log("do..."); }
$('#wmd-input').bind('blur', doo);
$('#wmd-input').bind('keypress focus', function(e) {
$('#wmd-input').off('blur');
if (e.keyCode == 13) {
doo(e);
} else
$('#wmd-input').bind('blur', doo);
});
当焦点发生时它会再次绑定。