2012-12-13 45 views
1

我正在使用一些JavaScript來檢查可能的匹配數組的表單字段。取決於匹配用戶,他們被提供確認窗口並且依賴於結果表單被提交或者用戶被返回到頁面。此過程在Firefox和Chrome中按預期工作,但在IE和Opera中,另一個提交仍在觸發中。任何人都可以建議我如何解決這個問題?jQuery submit()在FF/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實際上有兩個提交值。除此之外,這是非常基本的,爲了簡化又重新修剪了散裝。

<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繼續,並提交表單,就像點擊「下一個」提交一樣。

但是,在IE和Opera中,$ .post發生,但表單被提交,就像點擊「取消」一樣。

任何人都可以向我解釋這一點,我似乎無法找到解決方案?

+0

'$( '#表')'告訴你必須在其標識 '形式' 的一種形式。你能展示這個表單嗎? – falsarella

回答

1

你有一個表格兩個提交按鈕你正在告訴表單提交。

結果未定義:每個瀏覽器都以自己的方式處理它!所以,我建議您不要告訴表單提交,我們建議您撥打致電提交按鈕的點擊事件,您需要撥打

+0

您的建議最有意義。我轉而使用click事件並使其按需要工作。 – dajoto

2

我不推薦兩個submit按鈕之一的形式It's valid HTML as per the spec,但國際海事組織,一個不好的做法。

無論您按哪個按鈕,您都在執行submit事件,而不會阻止預期的默認行爲。

此外,使用jQuery你bind「荷蘭國際集團submitform,但submit已經被綁定到系統默認的形式。您可以嘗試以下操作,但我仍強烈建議您重新設置代碼以排除第二個按鈕並將其替換爲其他值。

Try preventDefault() ...

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

     // rest of your code follows under preventDefault 

}); 
+0

感謝您的回答。它確實按預期工作,一旦預設事件被阻止。然而,我確實只是在所需要的元素上綁定了click事件而不是提交,這樣就節省了我需要改變的任何東西(這是第三方形式,我正在尋找添加JS的東西,所以不願改變它) – dajoto

相關問題