2010-02-08 2 views
1

У меня есть поиск, который работает AJAX. Он отлично работает, когда пользователь нажимает кнопку поиска, проблема в том, что ... если пользователь нажимает кнопку ввода ... он отправляет форму, а не выполняет функцию javascript AJAX. Как заставить кнопку «Ввод» вызывать функцию AJAX вместо отправки формы?отправить текстовое поле для ввода нажмите (AJAX)

ответ

2

Ловушка в методе onSubmit формы и возвращает false.

+0

Извините, как я могу ловить ловушку на Submit ... вы можете разработать? – Jackson

+0

в вашем

добавьте onSubmit = "return runAjaxInstead()" и у меня есть runAjaxInstead() return "false", который он не будет отправлять. –

+0

Это также независимое от структуры решение, если вы не используете jQuery. –

0

С jQuery:

jQuery("#myform").submit(function() { 
callAJAXFunction(); 
return false; 
}); 
+0

Скорее всего, для этого нужно использовать jQuery. И jQuery не всегда лучший вариант, в зависимости от того, что вы делаете. – jonycheung

+0

@ JONYC Я не согласен. Если у вас есть jQuery под рукой, я бы сказал, что лучше использовать его для поддержания согласованности, чем смешивать DOM-манипуляцию/обработку событий на основе jQuery с обработкой DOM на основе jQuery/обработкой событий. Я согласен с вами в том, что jQuery может быть не лучшим решением для * всего *. –

+0

@vivin Я просто указываю, что, делая именно это, jQuery является излишним. И плюс, вопрос не запрашивал jQuery. Также я бы не пошел с jQuery сам из-за плохо спроектированного синтаксиса. Подробнее об этом читайте здесь: http://blog.thinkrelevance.com/2009/1/12/why-i-still-prefer-prototype-to-jquery – jonycheung

3

onsubmit Используйте событие форме, чтобы выполнить свой Ajax вызова и кнопку в кнопку отправки, если это уже не.

Пример HTML

<form action="/search.php" onsubmit="submitAjaxQuery(event)"> 
    <input type="text" name="keywords" /> 
    <button type="submit">Go!</button> 
</form> 

Пример JS

function submitAjaxQuery(event) 
{ 
    if (event.preventDefault) 
     event.preventDefault(); 
    else 
     event.cancel = true; 

    // run ajax calling function here. 
} 
+1

Это работает, но я думаю, что его немного переборщит. Вместо дополнительной функции простой 'onsubmit = "ajax(); return false;"' сделал бы трюк – Mark

3

Вот простой DOM способ справиться с этим:

<form action="javascript:void(0)"> 
    <input type="text" /> 
    <input type="submit" onclick="doSomething(this.form)"> 
</form> 
<script> 
    function doSomething(form){ 
     alert('form submitted'); 
    } 
</script> 

Поместите курсор в поле ввода , и либо если вы нажимаете кнопку или введите ввод, форма отправляется на javascript (а не на страницу)

+1

Это решение не имеет резервной копии для пользователей, не поддерживающих javascript. –

0

Правильный способ - предоставить пользователям, не использующим javascript, форму отправки с обновлением страницы, но вызов javascript для тех, у кого есть javascript:

<form action="yourscript.php" method="post" onsubmit="doSomething(this.form); return false;"> 
    <input type="text" /> 
    <input type="submit" /> 
</form> 
<script> 
    function doSomething(form){ 
     alert('form submitted'); 
    } 
</script> 
Смежные вопросы