jQuery Дважды происходит событие - PullRequest
3 голосов
/ 29 марта 2011

Моё событие jQuery submit() запускается дважды, и я не знаю почему.

Я использую шаблонизатор для динамического построения HTML-кода, поэтому в итоге я вызываю $(document).ready() несколько раз, как показано ниже ...

<script>
$(document).ready(function() {
    $("form.search input[type='image']").click(function() { $(this).closest('form.search').submit() })
})
</script>

... позже ...

</script>
$(document).ready(function() {
    # I have put an `unbind('submit')` in here to be sure I have nothing else but this particular function bound to `submit`
    $('form.search').unbind('submit').bind('submit',function(event) {
        event.stopPropagation();
        search_term = $(this).find('input[type=text]').val()
        $new_keyword = $('<li class="filter keyword selected" name="'+search_term+'">'+search_term+'</li>')
        alert('event fired!')
        $("#keywords ul").append($new_keyword)
        do_search_selected()
        return false; // Stop the form from actually submitting
    })
})
</script>

Форма HTML:

<form class="search" method="get" action="/search/">

    <div>
        <input id="searchfield"type="text" name="keywords" value="Search" />
        <input id="searchbutton" type="image" src="{{ media_url }}images/search.png" />
     </div>
</form>

( К вашему сведению: Когда я запускаю это в консоли Safari $('form.search').get(), я получаю это [ <form class=​"search" method=​"get" action=​"/​search/​">​…​</form>​ ])

Проблема:

Когда я нажимаю Введите или нажмите кнопку отправки или иным образом запустите событие submit, событие запускается дважды. Я знаю это, потому что <li> добавляется дважды к DOM и alert появляется также дважды.

Виновник:

Когда я закомментирую привязку события click в первом вызове $(document).ready, событие происходит только один раз, как и ожидалось. Как код в первом может вызывать двойной запуск события?

Ответы [ 2 ]

7 голосов
/ 29 марта 2011

Проблема была в первой функции $(document).ready().Я связал событие click для input[type=image], чтобы вызвать событие submit в моей форме, но оказалось, что при нажатии изображения по умолчанию при вводе изображений уже submit.

1 голос
/ 29 марта 2011

Выбор формы и предотвращение обработчика отправки по умолчанию должны работать так, как вы их описали.Я вполне уверен, что несвязанная ошибка (может быть, в do_search_selected()?) Не позволяет вызову достигнуть «return false», что приводит к отправке формы как обычно.*

Только что видел последний комментарий.Вы можете проверить это, запустив только селектор, предупреждение и переопределение.Если вы используете AJAX асинхронно в этой функции, вам может потребоваться установить async.

Кроме того, добавьте точку с запятой в конце своих утверждений!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...