Ну, я потратил часы на эту проблему и отсканировал весь поток stackoverflow, но до сих пор не знаю, что делать. Но то, что действительно меня раздражает, заключается в том, что такой тривиальный и самый простой в мире не работает. Итак, что у меня сейчас есть форма с входами и кнопками:Не удалось отправить форму при первом событии клика
<form id="frm" action="/accent/login/enter/">
{% csrf_token %}
<div draggable="true" id="panel" class="panel" title="">
<input id="login" name="login" type="text" placeholder="" class="required" /> <br/>
<input id="pswd" name="pswd" type="password" placeholder="" class="required" /> <br/>
<button id="btn" value="">ENTER</button>
</div>
</form>
И у меня есть этот код, который предполагается отправить форму:
$('#btn').one("click",function(){ // prevent from multiple submits
$('#frm').validate({ // validate the form before submission
...general stuff: rules, messages, etc
submitHandler:function(form){
$('#frm').submit(function(e){ //submitted on the second click. why???
...prepare parameters for ajax call
$.ajax({
type:'POST',
...general stuff
});
e.preventDefault();
})
}
});
});
Проблемы есть, когда пользователь нажимает на кнопку отправки в первый раз, то форма не отправляется, если, однако, он или она нажимает на нее во второй раз, тогда она отправляется в порядке. Я не могу понять логику такого поведения, реализованного в jquery. Кроме того, я должен сказать, что я пробовал много других хитростей, как:
form.submit(...
$('#frm')[0].submit(...
Но они работают, как ожидалось, а если нет функции обратного вызова - я перенаправлены на URL, но не остаются на той же странице - именно то, что я ожидаю от e.preventDefault
. Я думаю, что в jquery есть некоторые священные методы или магические свойства, которые я должен использовать, чтобы заставить его работать (например, метод one
, который предотвращает ужасные множественные представления). Но в этот момент я их не знаю.
EDIT
Я также попробовал этот трюк:
jQuery('#frm').submit(...
но это работает точно так же, как и первый метод - $('#frm').submit(...
EDIT
я нашел третий метод который работает как предыдущий:
$('form').submit(...
Подводя итог, у меня есть три разных метода, но все они работают только тогда, когда пользователь нажимает кнопку во второй раз. И у меня есть два метода, которые работают стандартным образом и не позволяют использовать функцию обратного вызова.
попробовать отладку с помощью инструментов разработчика Chrome, его очень полезным для такого рода вещи, вы можете добавить точки останова и все. – octohedron
Я попытался сделать это сам. Firebug не показывает ничего странного. Если я просто попытаюсь предупредить вас перед отправкой, тогда я это вижу, но все остальное молчат, как будто есть черная дыра и никакой другой дополнительный код. – Jacobian
Вы пытались поставить 'e.preventDefault()' _before_ вызов ajax? – nevvermind