2012-06-20 2 views
0

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

В настоящее время у меня есть две кнопки отправки (так что я не могу использовать $(form).submit в данном случае), оба из которых будут меняться еще одно поле, когда они активизируются:

<button id="accept" type="submit">Accept</button> 
<button id="decline" type="submit">Decline</button> 

Для достижения этой цели я обнаружил событие щелчка, и введите нажатие клавиши события отдельно:

$('#accept').click(function(){ $('#decision').val('Agree'); }) 
$("#accept").keyup(function(event){ 
    if(event.keyCode == 13){ 
     $('#decision').val('Agree'); 
    } 
}); 

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

(с вышеизложенным я беспокоился о других способах имитируют нажатие кнопки, например, ударяя пространство, хотя это, кажется, покрыты!)

Спасибо!

ответ

2

для кнопки элемента, как пробел и ввести ключ не давит на кнопку will generate a click event according W3C event specifications. Вам не нужно выполнять какую-либо специальную обработку, чтобы справиться с этим.

Что касается использования $(form).submit(), вы можете.Просто измените ваши кнопки не неявно отправить форму по чейнинга их push buttons (W3C):

<button type="button" id="...">...</button> 

Тогда в обработчике вы можете сделать:

$('#accept,#decline').click(function(event){ 
    $('#decision').val($(event.target).text()); 
    $(form).submit(); 
} 

Если вам нужно вы можете сделать некоторую обработку $(event.target).text() в при необходимости сделайте «Отклонить» null/emptystring.

+0

Ah! Я никогда не знал этого, это также объясняет, почему пробел запускает событие, спасибо! Отличное решение – Nick

1

Думаю, что я понимаю ваш вопрос, и в этой смежной теме может быть несколько приоритетов.

jQuery: how to get which button was clicked upon form submission?

Этот метод позволяет избежать добавления .click() событие для каждой кнопки, хотя это может быть жизнеспособным вариантом для вашего приложения.

Надеюсь, это поможет! Мейсон

+0

Спасибо, это было не совсем то, о чем я просил, но это дает очень приятное альтернативное решение! :-) – Nick

2

вы можете сделать что-то вроде этого, чтобы сделать кнопку немного лучше: (с использованием функции необходимо здесь, чтобы получить что-то лучше):

function setDecision(value){ 
    $('#decision').val(value); 
} 

$('button[type=submit]').click(function() { 
    var val = $(this).text(); 

    setDecision(val); 
}); 

$("button[type=submit]").keyup(function(event){ 
    var val = $(this).text(); 

    if(event.keyCode == 13){ 
     setDecision(val); 
    } 
}); 
+0

Ах, я подумал, что функция может понадобиться, спасибо, но этот код приятный и гибкий! – Nick

1

Добавить name="decision" и value="Accept"/value="Decline" (соответственно) для Передать кнопки

Таким образом, вам не нужно JavaScript, чтобы справиться с этим на всех ...

И если «Принять» кнопку является первым, а затем прижимные insid введите е любое поле формы будет также вызвать, что один

Пример:

<form action="1.html" method="get"> 

<input type="text" name="in"> 

<button type="submit" name="decision" value="Accept">Accept</button> 
<button type="submit" name="decision" value="Decline">Decline</button> 

</form> 
+0

Большое спасибо, хорошее решение, но, к сожалению (как обсуждалось ранее по другому вопросу) из-за того, как я делаю вызовы jQuery, мне нужна скрытая функция. – Nick

Смежные вопросы