У меня не было возможности попробовать это, но это должно сработать для вас.
$("form").live('change', function(e) {
$(this).data('changed', true);
});
$('form input, form select').live('keypress', function(e)
{
var form = $(this).closest('form');
if (((e.which && e.which == 13 || (e.keyCode && e.keyCode == 13)) && form.data('changed') == true)
{
if ($(this).closest('form').find('button').size() <= 0)
{
return true;
}
var defaultButton = form.find('button:first');
defaultButton.click();
$(this).blur();
console.log("Submitted!");
form.data('changed', false);
return false;
}
else
{
return true;
}
});
Событие изменения не вызывается нажатием клавиши ввода при автозаполнении (или, по крайней мере, в моем предыдущем опыте).) поэтому при наличии действительного изменения вы захотите отправить его.Может быть случай, когда вы щелкаете в ячейке, для которой вы хотите установить «измененные» данные формы в значение «истина», но вам нужно будет поэкспериментировать и проверить, соответствует ли ваше поведение ожидаемому.
Редактировать:
Чтобы показать вам, что я имел в виду
$("form").live('focus', function(e) {
$(this).data('changed', true);
});