jQuery submit, как я могу узнать, какая кнопка отправки была нажата?
Я использую плагин ajaxSubmit для отправки форм Ajax, но по какой-то причине этот плагин не отправляет имена/значения input[type=image]
. Итак, теперь я ловлю событие submit до того, как ajaxSubmit обработает форму, и мне нужно знать, можно ли узнать, какая кнопка была нажата?
8 ответов
$("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;
});
});
скажите мне что-нибудь, если это сработало;)
Это поймает любой входной элемент, инициировавший submit:
$(document).ready(function() {
var target = null;
$('#form :input').focus(function() {
target = this;
alert(target);
});
$('#form').submit(function() {
alert(target);
});
});
Это то, что я использую (небольшое изменение на других, используя события mouseup и keyup вместо фокуса):
var submitButton = undefined;
$('#your-form-id').find(':submit').live('mouseup keyup',function(){
submitButton = $(this);
});
$('#your-form-id').submit(function() {
console.log(submitButton.attr('name'));
});
ниже я думаю, что это будет более полный пример того, как выполнить то, что вы просили. Вы должны заменить " #your-form "С вашей формой id и заменить"Один"&"Два " со значениями на кнопках формы.
$(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);
}
});
});
вот как я ее решила. Я был вдохновлен некоторыми из ответов, опубликованных выше, но мне нужен был подход, который работал бы для всех моих форм, так как я загружал их динамически.
Я заметил, что у 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;
}
Я построил объект данных таким образом, потому что я хотел, чтобы он вел себя так же, как если бы я отправил его с помощью vanilla HTML/PHP (имя ввода является ключом в массиве $_POST). Полагаю, если бы я хотел остаться верным его реальному поведению, я бы добавил бы значение или innerHTML кнопки отправки, но я обычно просто проверяю, установлен ли он так, что это было не обязательно :).
Я нашел это очень полезным. Он охватывает случай нажатия, а также отправки с индексом вкладки и нажатия пробела или ввода. Он захватывает последний ввод перед отправкой, и это кнопка, которая отправлена, поэтому вы можете иметь несколько кнопок и проверять каждую как цель, чтобы выполнить что-то уникальное.
$('#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;
}
});
$(document).ready(function() {
var clickedVar = null;
$('#form :submit').focus(function() {
clickedVar = $(this).attr("name");
alert(clickedVar);
});
});
Привет, ответ не убедил меня так много здесь, чтобы вывести альтернативу. Что я сделаю, это проверить 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