2013-07-13 11 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 в JsBin: http://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

У меня есть много форм на странице, поэтому я хочу вызвать ближайшую форму из клика submit. имеет ли это смысл? Благодарю. – laukok