2014-03-05 178 views
0

我有一個提交按鈕和處理程序的窗體。該處理程序會執行一些驗證,如果驗證不是很酷,則會執行preventDefault()。jquery form.submit()觸發處理程序,但不是實際的提交

我的表單上有第二個按鈕,無需驗證即可提交。我的思維邏輯是:這個按鈕將添加一個類,指示,不驗證,然後觸發提交。提交事件將始終檢查是否應該驗證。

一些代碼:

//Add handler for no-validation submit 
    $('#button-no-falco').click(function() { 
     $('#form').addClass('no-falco'); 
     $('#form').submit(); 
    }); 


    $('#form').submit(function(e) { 
     //If form has no-falco, don't validate. 
     if ($(this).hasClass('no-falco')) { 
      console.log("Skipping validation. Just submit."); 
      return; 
     } 

     //Validation code 

     e.preventDefault(); 


    }); 

一些HTML:

<form role="form" method="post" action="{{action_url}}" name="edit-object"> 
    <!-- bunch of inputs --> 
    <button type="submit" id="submit" class="btn btn-default">Save!</button> 
    <button type="button" id="button-no-falco" class="btn btn-default">No validation</button> 
</form> 

所以現在單擊按鈕,無法爾科按鈕將導致整個驗證被跳過,甚至有顯示出來的日誌信息。但是,實際的表單沒有提交。

如果我點擊常規提交按鈕(點擊了其他按鈕後)表單確實提交。

發生了什麼事?

+0

我認爲你需要添加返回true;這裏如果($(this).hasClass('no-falco')){console.log(「跳過驗證,只需提交。」);返回true; } – Neha

回答

2

變化,從提交到別的

<button type="submit" class="btn btn-default">Save!</button> 
<button type="button" id="button-no-falco" class="btn btn-default">No validation</button> 

演示按鈕ID:Fiddlewith id submit

它覆蓋形式方法submit導致.submit()調用失敗

+0

我不會在一百萬年內猜到它。將ID更改爲「submit-button」並突然生效。 – Coo

+0

是啊!有'name = submit'或'id = submit'會導致jQuery處理程序失敗!有人可以解釋這背後的技術混亂嗎?因爲對我來說,這是毫無意義的...... oO –

+0

@RomeoSierra'它覆蓋了導致.submit()調用失敗的form方法提交,Form'有一個提交屬性,它是一個函數,但是當你有一個名爲'submit'的輸入元素,表單的'submit'屬性值將被該元素覆蓋(使用名稱submit'參考 –

0

嘗試添加:

var form=$('form'); 
+0

哦,對,馬虎。我這樣做,但我沒有發佈的代碼。我將在原始文章中進行編輯。 – Coo

0

嘗試,

$('.btn-default').click(function() { 
    if($(this).attr('id') == 'button-no-falco') { 
    $('#form').submit(); 
    } else { 
    // add code for validation and if validation returns true then submit form 
    } 

}); 

和刪除此,

$('#form').submit(function(e) { 
     //If form has no-falco, don't validate. 
     if ($(this).hasClass('no-falco')) { 
      console.log("Skipping validation. Just submit."); 
      return; 
     } 

     //Validation code 

     e.preventDefault(); 


    }); 
0

你可以僅僅刪除綁定,然後提交,無需添加和檢查一類

$('#button-no-falco').click(function() { 
    form.off(); //remove all registered handlers 
    form.submit(); 
}); 

小提琴:http://jsfiddle.net/978JS/4/

+0

我也喜歡這個!沒有想到這一點! – Coo

相關問題