2013-07-07 115 views
2

我有以下提交事件沒有捕捉提交類型的輸入

$(document).ready(function() { 
    $('#comment-edit-form').submit(function() { 
     $.ajax({ 
      type: $(this).attr('method'), 
      url: '/comments/edit/' + $(this).attr('comment_pk') + '/', 
      data: $(this).serialize(), 
      success: function(data){} 
     }); 
     return false; 
    }); 
}); 

的形式提到的Ajax GET請求是這樣的

<form method="get" id="comment-edit-form"> 
.. 

<input class="btn btn-primary" type="submit" name="preview" value="Preview"> 
<input class="btn btn-primary" type="submit" name="submit" value="Submit"> 

</form> 

在這種形式下,我有兩個不同的提交按鈕!各有不同的操作!

我跟蹤的GET請求的URL是一樣的東西下面

?input1=1&input2=2... 

我期待?input1=1&input2=2&submit=?input1=1&input2=2&preview=

爲什麼我不能在要求遵守「提交」或「預覽」的名字??

+0

爲什麼不寫類型''GET''而不是獲取的方法?它會更短,並且還可以簡化將來的錯誤。 –

回答

3

這是因爲jQuery只有serializes the nodeTypes input, select, textarea and keygen,輸入類型不是submit,button, image, file or reset

望着jQuery的源代碼,你可以告訴表單元素輸入類型對以下正則表達式檢查:

/^(?:submit|button|image|reset|file)$/i 

此檢查是在.serializeArray這是由.serialize在你的代碼中調用。


有興趣的讀者 - 這是complete filter

return this.name && // has a name 
     !jQuery(this).is(":disabled") && // is not a disabled input 
     rsubmittable.test(this.nodeName) && // is either input, select,textarea or keygen 
     !rsubmitterTypes.test(type) && // the test explained above 
     (this.checked || !manipulation_rcheckableType.test(type)); // checked