2013-07-13 72 views
1

爲什麼我不能在下面的例子中觸發提交按鈕的最接近的形式?爲什麼我不能觸發提交按鈕的最接近的形式?

HTML,

<form name="input" action="html_form_action.asp" method="get"> 
Username: <input type="text" name="user"> 
<input type="submit" value="Submit"> 
</form> 

jQuery的,

$('input[type=submit]').click(function(){ 

    $(this).closest('form').unbind('submit').submit(function(){ 
      alert("hello world"); 
     return false; 
    }); 
    return false; 
}); 

我應該得到的警告信息,但我不能。我做錯了什麼?

jsfiddle

回答

2

哇,這是一個很大冒泡事件......

你回頭率虛假和有約束力和unbiding事件.. ,這是行不通的,但你可以簡單的改變你的submit按鈕正常button,例如:

<form name="input" action="html_form_action.asp" method="get"> 
    Username: <input type="text" name="user" /> 
    <input type="button" value="Submit" class="btn-submit" /> 
</form> 

,寫

$(".btn-submit").click(function() { 
    $(this).prop("disabled", true); // dont allow more clicks 
    alert('about to submit...'); 
    $(this).closest("form").submit(); 
    alert('done!'); 
}); 

DEMO在JsBinhttp://jsbin.com/elokov/1/


與Ajax調用提交表單

$(".btn-submit").click(function(evt) { 
    $(this).prop("disabled", true); // dont allow more clicks 
    alert('about to submit...'); 

    var frm = $(this).closest("form"); // our form 

    $.ajax(
     type: frm.attr("method"), 
     url: frm.attr("action"), 
     data: frm.serialize(), 
     success: function(data) { 
      alert('all went well'); 
     }, 
     success: function(jqXHR, textStatus) { 
      alert('err, something messed up! ' + textStatus); 
     } 
    ); 

    return false; // or use evt.preventDefault(); 
}); 
+0

謝謝。我需要處理表單的數據並通過'$ .ajax'發送,那麼我怎樣才能把'$ .ajax'放進去呢? – laukok

+0

通過ajax調用發送表單?當然,這很簡單:更新我的答案。 – balexandre

+0

謝謝,但很抱歉 - 無法看到您的更新! :( – laukok

0

因爲你的代碼只是綁定提交事件但是並不觸發提交事件。如果你只是想阻止提交表單,並改變那麼這應該足夠

$('input[type=submit]').click(function (e) { 
    alert("hello world"); 
    return false; 
}); 
+0

我怎麼觸發它呢?我需要'submit'中的提示信息。 – laukok

+0

你爲什麼不直接設置表單? –

+0

我在頁面上有很多表單,所以我想從提交點擊觸發最接近的表單。是否有意義?謝謝。 – laukok

相關問題