javascript - 重新启用 event.preventDefault();

标签 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 时实际提交表单。我有什么想法可以恢复/提交默认行为吗?甚至是替代方法。感谢您的帮助!

最佳答案

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 中,您只需将 onclick 处理程序替换为 .click(function(e){})

关于javascript - 重新启用 event.preventDefault();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343438/

相关文章:

javascript - 导入默认导出和命名导出是否会加载模块两次?

javascript - 比较 ES6(编译为 ES5)与 CoffeeScript 和 TypeScript 的特性

javascript - 如何让边距不偏移我的网格

jQuery - 使用箭头键导航 div 网格

javascript - 尝试在 JS 中按类隐藏元素,但收到 "cannot set property ' class' of undefined”错误

javascript 将字符串转换为数组,并为每个数组添加复选框

javascript - 将 contextMenu 附加到 float 图形点

jQuery .on 效率

javascript - 知道事件的先前处理程序是否返回 false。 defaultPrevented 在 IE < 9 中?

javascript - 如果单击特定子元素,则不触发主容器单击