我正在使用一些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 critera时,这似乎有效。 $ .post继续,表单被提交,好像点击了“NEXT”提交一样。
然而,在IE和Opera中,$ .post会出现,但提交的表单就好像点击了“取消”一样。
任何人都可以向我解释这一点,我似乎无法找到解决方案吗?
答案 0 :(得分:2)
我不建议在一个表单上使用两个submit
按钮。 It's valid HTML as per the spec,但IMO,这是一种不好的做法。
无论您按哪个按钮,都会执行submit
事件而不会阻止预期的默认行为。
此外,使用jQuery,您bind
submit
form
submit
,但默认情况下submit
已绑定到表单。您可以尝试以下操作,但我仍然强烈建议您重新考虑代码以摆脱第二个$('#Form').bind('submit', function(e){ // don't forget the "e"
e.preventDefault(); // first line
// rest of your code follows under preventDefault
});
按钮并将其替换为其他内容。
{{1}}
答案 1 :(得分:1)
您有一个包含两个提交按钮的表单,而您正在告知要提交的表单。
结果未定义:每个浏览器都以自己的方式处理它!因此,我建议您调用您需要的提交按钮的点击事件,而不是告诉表单提交。