Быстрое (но очень грязное) решение
Это быстро, но не позаботится о ctrl+z
или cmd+z
и даст ложное срабатывание при нажатии shift
, ctrl
или клавиши tab
:
$('#my-form').on('change keyup paste', ':input', function(e) {
// The form has been changed. Your code here.
});
Проверьте это с помощью этой скрипки.
Быстрое (менее грязное) решение
Это предотвратит ложные срабатывания для shift
, ctrl
или tab
, но не будет обрабатывать ctrl+z
или cmd+z
:
$('#my-form').on('change keyup paste', ':input', function(e) {
var keycode = e.which;
if (e.type === 'paste' || e.type === 'change' || (
(keycode === 46 || keycode === 8) || // delete & backspace
(keycode > 47 && keycode < 58) || // number keys
keycode == 32 || keycode == 13 || // spacebar & return key(s) (if you want to allow carriage returns)
(keycode > 64 && keycode < 91) || // letter keys
(keycode > 95 && keycode < 112) || // numpad keys
(keycode > 185 && keycode < 193) || // ;=,-./` (in order)
(keycode > 218 && keycode < 223))) { // [\]' (in order))
// The form has been changed. Your code here.
}
});
Проверьте это с помощью этой скрипки.
Полное (менее быстрое) решение
Если вы хотите обработать все дела, вы должны использовать:
// init the form when the document is ready or when the form is populated after an ajax call
$(document).ready(function() {
$('#my-form').find(':input').each(function(index, value) {
$(this).data('val', $(this).val());
});
})
$('#my-form').on('change paste', ':input', function(e) {
$(this).data('val', $(this).val());
// The form has been changed. Your code here.
});
$('#my-form').on('keyup', ':input', function(e) {
if ($(this).val() != $(this).data('val')) {
$(this).data('val', $(this).val());
// The form has been changed. Your code here.
}
});
Проверьте это с помощью этой скрипки.