1

我正在使用一些 javascript 来检查表单字段与可能匹配的数组。取决于匹配用户是否显示确认窗口,并且取决于结果表单是否提交或用户返回到页面。此过程在 Firefox 和 Chrome 中按预期工作,但在 IE 和 Opera 中仍会触发替代提交。谁能建议我如何解决这个问题?

为简单起见,脚本已删除大部分数据。

$(function(){
    var check = ["All", "array", "values"];
    $('#Next').click(function(){
        $(this).addClass('hit');
        $('#Cancel').attr('disabled', 'disabled');
    });
    $('#Form').bind('submit', function(){
        if($(this).find('.hit').attr('id')=='Next'){
            $('#Next').removeClass('hit');
            var match = $('input[name="WHAT"]', $('#idBothAddressesTable')).val().trim();
            if(match.length==0){
                var postCode = $('input[name="WHAT2"]', $('#idBothAddressesTable')).val().trim();
            }
            var matched = $.inArray(match, check);
            if(matched != -1){
                var ask = confirm("This is the case, proceed or cancel");
                if(ask==true){
                        $.post('dowhat.php',{flag: 1}, function()){
                        $('#Form').unbind('submit').submit();
                    });
                }
                else{
                    ('#Cancel').removeAttr('disabled');
                    return false;
                }
            }
        }
    });
});

表单实际上有两个提交值。除此之外非常基本,为简单起见再次修剪了大部分。

<form action="nextpage.php" method="post" id="Form">
    <input type="text" name="WHAT" />
    <input type="text" name="WHAT2" />
    <input type="submit" name="CANCEL" value="Cancel" id="Cancel" />
    <input type="submit" name="NEXT" value="Next" id="Next" />
</form>

在 Firefox 和 chrome 中,当有人遇到 ask==true 标准时,这似乎可以工作。$.post 继续并提交表单,就像单击“NEXT”提交一样。

然而,在 IE 和 Opera 中,会出现 $.post,但提交表单时就像点击了“取消”一样。

谁能给我解释一下,我似乎找不到解决方案?

4

2 回答 2

2

我不建议submit在一个表单上使用两个按钮根据规范,它是有效的 HTML,但 IMO 是一种不好的做法。

无论您按下哪个按钮,您都在执行一个submit事件,而不会阻止预期的默认行为。

bind此外,使用jQuery ,您正在submit使用form, 但submit默认情况下已经绑定到表单。您可以尝试以下方法,但我仍然强烈建议您重构代码以摆脱第二个submit按钮并用其他东西替换它。

preventDefault()...

$('#Form').bind('submit', function(e){ // don't forget the "e"
        e.preventDefault(); // first line

        // rest of your code follows under preventDefault

});
于 2012-12-13T17:32:32.943 回答
1

您有一个带有两个提交按钮的表单,并且您正在告诉要提交的表单。

结果是不确定的:每个浏览器都以自己的方式处理它!所以,我建议你调用你需要调用的提交按钮的点击事件,而不是告诉表单提交。

于 2012-12-13T17:17:01.560 回答