Получение как форма была отправлена ​​на событие отправки - PullRequest
3 голосов
/ 14 февраля 2011

У меня есть форма с парой кнопок. Две кнопки используют ajax для отправки формы и очистки ее, чтобы пользователь мог добавить несколько записей, прежде чем двигаться дальше. Последняя кнопка предназначена для того, когда пользователь закончил со страницей и хочет перейти на следующую страницу. Можно ли в методе jSuery .submit () определить, как была отправлена ​​форма (нажав клавишу ввода или получить объект кнопки)?

Ответы [ 4 ]

0 голосов
/ 14 февраля 2011

jQuery события передают объект события через свои вызовы. Вы можете использовать этот объект события, чтобы определить, как событие было вызвано.

В частности, если вы передадите его в качестве параметра e в функции, вы можете проверить e.type, который должен быть равен click, или e.which, который, если он был представлен с помощью ввода, будет быть 13

Вы можете использовать target, чтобы узнать, какой элемент DOM инициировал отправку с помощью e.target.

Итак,

jQuery('#foo').click(function(e){
var initiator = $(e.target); //jQuery object for the DOM element that initiated the submit
if(e.type==="click")
{
//is a click
}
else if(e.which==="13")
{
//is an 'enter' triggered submission
}
});

});

0 голосов
/ 14 февраля 2011

Вы можете определить обработчики событий onclick для ваших кнопок, которые сохранят состояние в некоторой переменной global-scope.Затем вы должны проверить состояние переменной в обработчике onsubmit.

0 голосов
/ 14 февраля 2011

вы можете попробовать так:

HTML:

<form id="myform">
    <input type="text" id="text1" name="text1" /><br />
    <input type="button" class="button-submit" id="b1" name="b1" value="send 1" /><br />
    <input type="button" class="button-submit" id="b2" name="b2" value="send 2" /><br />
    <button class="button-submit" id="b3">send 3</button>
</form>

<br />
<div id="data"></div>

JS:

$('#myform').bind('submit', function(event, from) {

    if(from)    
       $('#data').append("from :" + $(from).attr('id') + '<br />');

    return false;

});

$('#myform').keypress(function(event) {

  if (event.which == '13') {
     event.preventDefault(); //preventDefault doesn't stop further propagation of the event through the DOM. event.stopPropagation should be used for that.
     event.stopPropagation();
     $(this).trigger('submit', [this]); 
     return false; 
  }

});

$('.button-submit').bind('click', function(event) { 
    event.stopPropagation();
    $('#myform').trigger('submit', [this]); 
    return false; 
});

пример
event.preventDefault

0 голосов
/ 14 февраля 2011

Не уверен, что это лучшие практики, но я обнаружил, что, если я создаю обработчик события submit, а затем после этого создаю обработчики для других кнопок, это, похоже, работает нормально, по крайней мере, в Chrome.Вот пример

$(function(){
    $('form#frmField').submit(function(evt){
        alert('Form Submitted');
        return false;
    });

    $('input#btnReset').click(function(){
        alert('Form Reset');
        return false;
    });
});
...