jQuery представить, как я могу узнать, какая кнопка отправки была нажата? - PullRequest
10 голосов
/ 28 января 2010

Я использую плагин ajaxSubmit для отправки форм Ajax, но по какой-то причине этот плагин не отправляет имена / значения input[type=image]. Итак, теперь я перехватываю событие submit, прежде чем ajaxSubmit обработает форму, и мне нужно знать, можно ли узнать, какая кнопка была нажата?

Ответы [ 8 ]

19 голосов
/ 28 января 2010

Это перехватит любой элемент ввода, инициировавший отправку:

$(document).ready(function() {
    var target = null;
    $('#form :input').focus(function() {
        target = this;
        alert(target);
    });
    $('#form').submit(function() {
        alert(target);
    });
});
7 голосов
/ 28 января 2010
$("input .button-example").click(function(){
//do something with $(this) var
});

PS: у вас есть jQuery для управления $ var? В противном случае вы должны сделать это:

jQuery.noConflict();
jQuery(document).ready(function(){
    jQuery("input .button-example").click(function(){
    //do something with jQuery(this) var
       alert(jQuery(this));
    });
});

если вы не хотите контролировать событие (отправка формы)

$(document).ready(function(){
    $("#formid").submit(function() {
          alert('Handler for .submit() called.');
          return false;
    });
});

скажи мне что-нибудь, если это сработало;)

5 голосов
/ 15 октября 2011

Это то, что я использую (небольшие отличия от других, используя события mouseup и keyup вместо focus):

var submitButton = undefined;
$('#your-form-id').find(':submit').live('mouseup keyup',function(){
    submitButton  = $(this);
});
$('#your-form-id').submit(function() {
    console.log(submitButton.attr('name'));
});
2 голосов
/ 25 сентября 2012

Я нашел это очень полезным. Он охватывает случай нажатия, а также отправки с указателем вкладки и пробелом или вводом. Он фиксирует последний ввод перед отправкой, и это кнопка, которая отправила, так что вы можете иметь несколько кнопок и отметить каждую в качестве цели для выполнения чего-то уникального.

$('#form input').live('focusin focusout mouseup', function() {
    // Add a data attribute to the form and save input as last selected
    $('#form').data('lastSelected', $(this));
});
$('#form').submit(function() {
    var last = $(this).data('lastSelected').get(0);
    var target = $('#button').get(0);
    console.log(last);
    console.log(target);
    // Verify if last selected was our target button
    if (last == target) {
        console.log('bingo');
        return false;
    }
});
2 голосов
/ 07 сентября 2011

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

Я заметил, что ajaxSubmit имеет опцию data, которая описывается плагиномвыполняет следующие действия:

Объект, содержащий дополнительные данные, которые должны быть отправлены вместе с формой.

Это именно то, что нам нужно.

ИтакЯ прикрепил обработчик нажатия к кнопкам отправки и сохранил элемент с помощью jQuery (я предпочитаю этот метод, чем добавление поддельного атрибута):

$('[type="submit"]').live('click', function(e){
        jQuery.data( $(this).parents('form')[0], 'submitTrigger', $(this).attr('name'));
});

А затем в своем вызове ajaxSubmit я построил объект данных и отправил егокак это:

function dialogFormSubmit( form ) {
    var data = {}
    data[jQuery.data( form, 'submitTrigger')] = true;
    $(form).ajaxSubmit({ 
        data: data
    });
    return false;
}

Я построил объект данных таким образом, потому что я хотел, чтобы он вел себя так же, как если бы я представил его с ванильным HTML / PHP (имя ввода является ключом вМассив $ _POST).Я полагаю, если бы я хотел остаться верным ее реальному поведению, я бы добавил значение или innerHTML кнопки отправки, но я обычно просто проверяю, установлено ли оно, чтобы оно было ненужным:).

2 голосов
/ 18 августа 2011

Ниже приводится то, что, я думаю, было бы более полным примером того, как выполнить то, что вы просили. Вы должны заменить " # your-form " на свою идентификационную форму и заменить " Button One " & " Button Two " значениями на кнопках формы .

$(document).ready(function() {
  var target = null;
  $('#your-form-id :input').focus(function() {
    target = $(this).val();
  });
  $('#your-form-id').submit(function() {

    if (target == 'Button One') {
      alert (target);
    }
    else if (target == 'Button Two') {
      alert (target);
    }
  });
});
1 голос
/ 28 января 2011
$(document).ready(function() {
    var clickedVar = null;
    $('#form :submit').focus(function() {
         clickedVar = $(this).attr("name");
         alert(clickedVar);
    });
});
0 голосов
/ 05 ноября 2015

Привет, ответ не убедил меня так много здесь, чтобы привести альтернативу.Что я сделаю, это проверю с помощью JS, какая кнопка была нажата.

<head>
<script>
$('body').click(function(event) {
     var log = $('#log');
     if($(event.target).is('#btn1')) {
        log.html(event.target.id + ' was clicked.');
        return false;
    }else{
        if($(event.target).is('#btn2')) {
           log.html(event.target.id + ' was clicked.');
           return false;
              }
         }
});
</script>
</head>
<body>
   <form id="formulario"  method="post">
      <div id="log"></div>
      <input type="submit" id="btn1" value="Btn 01">
      <input type="submit" id="btn2" value="Btn 02">
  </form>
</body>

Используйте эту страницу, чтобы выполнить тест Тест

Saludos

...