Sc0undRel
@Sc0undRel

Javascript срабатывает после 2 клика — почему?

Ув. гуру!
Прошу помогите найти ошибку - в яваскрипте я плох Растерялся

Значит выводится вот такая форма:
<form action='/engine/ajax/my_votepost.php' method='POST' id='votepost' onsubmit='doVotePost(1,2,3); return false;'> ... </form>


Вот функция:
function doVotePost (who,kogo,newsid) {
  $('#votepost').submit(function(e){
    e.preventDefault();
    var m_method=$(this).attr('method');
    var m_action=$(this).attr('action');
    var m_data=$(this).serialize();
    $.ajax({
      type: m_method,
      url: m_action,
      data: m_data+"&who="+who+"&kogo="+kogo+"&newsid="+newsid,
      success: function(result){
          $('#votepost').html(result);
      }
    });
  });
};


В результате скрипт работает, возвращается нужный result, но это происходит только после 2-ого клика по кнопке SUBMIT. Почему?

Если в яваскрипте удалить вот эту строку (оставить то, что внутри, но удалить конкретно вот это), то скрипт срабатывает после первого же клика, НО вместо возвращения result перекидывает на /engine/ajax/my_votepost.php и выводит результат там.
$('#votepost').submit(function(e){ };

Что не так с $('#votepost').submit(function(e){ ?
  • Вопрос задан
  • 1920 просмотров
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Навертели вы что-то с квадратными колёсами...

HTML
<form action="/engine/ajax/my_votepost.php" method="POST" id="votepost">...</form>

JS
$(document).on('submit', '#votepost', function (e) {
	var form = $(this);

	e.preventDefault();
	$.ajax({
		type: this.method,
		url: this.action,
		data: form.serialize()
	}).done(function (result) {
		form.html(result);
	});
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Что не так с $('#votepost').submit(function(e){ ?


Верните false из функции и будет вам счастье
Ответ написан
@shoomyst
dumb
Не так то, что submit(function....) это только подписка на сабмит. Т.е. в первый клик вы только подписываетесь, а во второй - подписка уже срабатывает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы