Вот пример, в котором this.form используется для получения правильной формы, в которую отправляется запрос, и поля данных для хранения последнего нажатого / выделенного элемента.Я также поместил код подтверждения в тайм-аут, чтобы убедиться, что события щелчка происходят до его выполнения (некоторые пользователи сообщают в комментариях, что в Chrome иногда событие щелчка вызывается после отправки).
Работает при навигации по обеим клавишами с помощью мыши / пальцев без учета браузеров для отправки события нажатия на клавишу RETURN (хотя это не помешает) я добавил обработчик событий для событий фокуса для кнопок и полей.
Вы можете добавить кнопки типа= "отправить" элементам, которые сохраняются при нажатии.
В демоверсии я установил красную рамку, чтобы показать выбранный элемент, и предупреждение, которое показывает имя и значение / метку.
Вот FIDDLE
А вот (тот же) код:
Javascript:
$("form").submit(function(e) {
e.preventDefault();
// Use this for rare/buggy cases when click event is sent after submit
setTimeout(function() {
var $this=$(this);
var lastFocus = $this.data("lastFocus");
var $defaultSubmit=null;
if(lastFocus) $defaultSubmit=$(lastFocus);
if(!$defaultSubmit || !$defaultSubmit.is("input[type=submit]")) {
// If for some reason we don't have a submit, find one (the first)
$defaultSubmit=$(this).find("input[type=submit]").first();
}
if($defaultSubmit) {
var submitName=$defaultSubmit.attr("name");
var submitLabel=$defaultSubmit.val();
// Just a demo, set hilite and alert
doSomethingWith($defaultSubmit);
setTimeout(function() {alert("Submitted "+submitName+": '"+submitLabel+"'")},1000);
} else {
// There were no submit in the form
}
}.bind(this),0);
});
$("form input").focus(function() {
$(this.form).data("lastFocus", this);
});
$("form input").click(function() {
$(this.form).data("lastFocus", this);
});
// Just a demo, setting hilite
function doSomethingWith($aSelectedEl) {
$aSelectedEl.css({"border":"4px solid red"});
setTimeout(function() { $aSelectedEl.removeAttr("style"); },1000);
}
DUMMY HTML:
<form>
<input type="text" name="testtextortexttest" value="Whatever you write, sir."/>
<input type="text" name="moretesttextormoretexttest" value="Whatever you write, again, sir."/>
<input type="submit" name="test1" value="Action 1"/>
<input type="submit" name="test2" value="Action 2"/>
<input type="submit" name="test3" value="Action 3"/>
<input type="submit" name="test4" value="Action 4"/>
<input type="submit" name="test5" value="Action 5"/>
</form>
DUMB CSS:
input {display:block}