重新启用event.preventDefault();

时间:2014-08-16 20:00:18

标签: javascript jquery event-bubbling

我一直在寻找解决这个问题的时间,我知道没有恢复默认解决方案类型的东西。不过这是我的问题。

$('#signInbtn').click(function(event) {
    checkLogInForm(event);
});

这将检查登录字段以确认它们不会留空,如下所示:

function checkLogInForm(event) {
    var usernameValid, passwordValid = false;
    checkUsername(usernameValid);
    checkPassword(passwordValid);
    if (!passwordValid || !usernameValid) {
        event.preventDefault();
    } else {
        $('#signInbtn').unbind('submit');
    }
}

然而,我尝试过的众多解决方案从未导致在触发else时实际提交的表单。我有什么想法可以恢复/提交默认行为?甚至是另一种方法。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

fiddle

一种解决方案是评估是否应该应用preventDefault操作:

/** 
*      toggle status if preventDefaultStatus is true 
*/
function updateStatus(preventDefaultStatus) {
     return (preventDefaultStatus === true) ? false : true;
}

/** 
*      toggle preventDefault
*/
function toggleDefault(isActive) {

    submitElement.onclick = function(e){

        if(isActive === true){

            e.preventDefault();

        }
    }       
}

/**
*      trigger toggleDefault and updateStatus
*/
function update(){
    toggleDefault(status);
    status = updateStatus(status);
}


exampleButton.onclick = update;


(function(){
    update();
})();

(用纯JavaScript编写,以澄清无论你是否使用jQuery,这都适用) 在jQuery中,你只需用.click替换onclick处理程序(function(e){})

答案 1 :(得分:0)

尝试使用带有表单ID或表单名称的'submit'事件作为jQuery选择器,例如:

$('#signInForm').submit(function(event) {
    checkLogInForm(event);
});

如果应提交表单,则checkLogInForm(event)方法可以将else语句保留。