防止onclick事件提交从提交按钮(Prevent submit button with oncl

2019-07-20 09:16发布

我想,以防止onclick事件提交按钮提交来自:

$j('form#userForm .button').click(function(e) {
    if ($j("#zip_field").val() > 1000){
        $j('form#userForm .button').attr('onclick','').unbind('click');
        alert('Sorry we leveren alleen inomstreken hijen!');
        e.preventDefault();
        return false;
    }
});

这是提交按钮:

<button class="button vm-button-correct" type="submit"
 onclick="javascript:return myValidator(userForm, 'savecartuser');">Opslaan</button>

它会显示“警告”功能,并且还删除onclick事件,但形式是无论如何提交。 提交将解决这个问题之前,手动删除onclick事件。 然而,这是核心功能,我不希望删除它。

编辑:

这肯定通过的onclick选择造成的。我怎么能强迫我的jQuery脚本立即重新加载onclick事件? 添加jQuery代码之前: $j('form#userForm .button').attr('onclick',''); 将解决问题。但是我的验证将无法正常工作的了...

Answer 1:

你需要将事件添加作为参数:

$j('form#userForm .button').click(function(event) { // <- goes here !
    if ( parseInt($j("#zip_field").val(), 10) > 1000){
        event.preventDefault();
        $j('form#userForm .button').attr('onclick','').unbind('click');
        alert('Sorry we leveren alleen inomstreken hijen!');
    }   
});

此外, val()总是返回一个字符串,所以一个好的做法是将其转换为一个数字,你把它比作一个数字之前,我不知道,如果你真的针对所有.button内的元素#userForm内功能,或者您应该使用this呢?

如果你正在使用jQuery 1.7+,你真的应该考虑使用on()off()这一点。



Answer 2:

基本上,如果你从改变你的按钮类型type="submit"type="button" ,这样的按钮将不会提交表单,并且不需要解决方法。

希望这可以帮助。



Answer 3:

不要忘了,还有功能/事件参数,但必须指定的参数:

$("#thing").click(function(e) {
  e.preventDefault();
});

通过这种方式,提交停止,所以你可以conditionalise它。



Answer 4:

最好的办法就是尽一切里面你提交表单的事件处理程序。 的onclick删除内联并运行它提交函数内

$j('#userForm').submit(function(e) {
    if (+$j("#zip_field").val() > 1000){
        alert('Sorry we leveren alleen inomstreken hijen!');
        return false;
    }
    return myValidator(userForm, 'savecartuser');
});


Answer 5:

我相信,有一个简单的方法:

$j('form#userForm .button').click(function(event) { // <- goes here !
    if ( parseInt($j("#zip_field").val(), 10) > 1000){
        event.stopPropagation();
    }   
});


文章来源: Prevent submit button with onclick event from submitting