Это интересный вопрос.
Ну, если вы не подумали ни на секунду (как я, по общему признанию, сделал), вы бы просто зацепили на blur
событии соответствующего элемента HTML <form>
.
<form onblur="autosave(this)">
Однако элемент HTML <form>
не поддерживает это событие. Очень жаль.
Я тогда подумал о новом событии jQuery 1.4 focusout()
.
$('form').focusout(function() { autosave(this); });
К сожалению, это событие уволят, а когда вы просто прыгать (вкладки, нажмите) к следующему полю ввода в той же форме. Не очень приятно, это будет слишком дорого для автосохранения на каждом поле. Тот же эффект, что и у $(':input').blur(function() { autosave(this.form); });
.
Затем я попробовал наоборот, используя focusin()
:
$('form').focusin(function() {
$(this).addClass('focused');
});
$(':not(form)').focusin(function(e) {
if (!$(e.target).parents('form.focused').length) {
var form = $('form.focused').removeClass('focused');
autosave(form);
}
});
Как ни странно это работает в IE только и не в других браузерах. Будет другой ошибкой IE/quirk, что focus
поддерживается всеми элементами, отличными от элементов ввода.
Ваш лучший выбор, вероятно, будет зависеть от события click()
.
$('form').focusin(function() {
$(this).addClass('focused');
});
$(':not(form)').click(function(e) {
if (!$(e.target).parents('form.focused').length) {
var form = $('form.focused').removeClass('focused');
autosave(form);
}
});
Это прекрасно работает. Вы можете найти здесь live demo.
Обратите внимание, что я не имею в виду, чтобы подтолкнуть вас JQuery (библиотека JS, которая безумно облегчает HTML DOM traversion и манипуляции) через горло или так, но я не вижу хорошие способы простой JavaScript для достижения это без записи в 10 раз больше, чем здесь.
Отлично .. Большое спасибо за thsi ... Я использую ibm jsf framework..может ли я контролировать это, указав id в мою форму (у меня может быть несколько форм на моей странице в моем сценарии и я не знаю, t хотите сохранить другие данные формы - т.е. поля ввода). – jack
также, в моей форме я могу иметь данные только для чтения. Не только поля ввода..и хочу сохранить как поля inpu, так и данные только для чтения. Не могли бы вы предложить мне, как я могу это сделать ... пожалуйста, пусть мне известно, как получить эти данные с предоставленной автоматической формы на серверной стороне ... я думаю, что request.getparameter может работать ...но я использую jsf (моя страница привязывается к бэк-файлу) .. предложите ... извините за разные вопросы .. это немного сложная область для меня .. – jack
большое спасибо заранее, jack. – jack