Confirm несколько раз.
Здравствуйте. Я хочу сделать возможность редактировать текст в input text форме и после редактирования ajax запрос и смена текста в базе. Но у меня это не получается так, как я хочу. Вместо единичного вызова confirm, confirm у меня вызывается несколько раз, т.к. событие change срабатывает при отмене. В общем вот код:
$(".inputs_client").bind('dblclick', function() { $(this).css("backgroundColor", "red"); $(this).css("color", "white"); var textbefore = $(this).attr('value'); this.readOnly = false; $(this).bind('change', function() { if (!confirm('Вы уверены?')) { $(this).attr('value', textbefore); textbefore = null; } else { $(this).attr('value', this.value); textbefore = null; } }); }); $(".inputs_client").bind('blur', function() { this.readOnly = true; $(this).css("backgroundColor", "white"); $(this).css("color", "black"); }); С каждым разом у меня на 1 раз больше вызывается команда confirm('Вы уверены?'). Помогите, пожалуйста, если вы поняли меня. А если не поняли, то поправьте, я всё объясню. |
Дело в том что вы вешаете событие change каждый раз когда срабатывает событие dblclick. Вариантов два, либо снимать событие по окончанию редактирования, либо изначально вешать только один раз (вне функции).
Снимаем событие: $(".inputs_client").bind('dblclick', function() { $(this).css("backgroundColor", "red"); $(this).css("color", "white"); var textbefore = $(this).attr('value'); this.readOnly = false; $(this).bind('change.myEvent', function() { if (!confirm('Вы уверены?')) { $(this).attr('value', textbefore); textbefore = null; } else { $(this).attr('value', this.value); textbefore = null; } $(this).unbind('change.myEvent'); }); }); $(".inputs_client").bind('blur', function() { this.readOnly = true; $(this).css("backgroundColor", "white"); $(this).css("color", "black"); }); Вешаем один раз: $(".inputs_client").bind('dblclick', function() { $(this).css("backgroundColor", "red"); $(this).css("color", "white"); $(this).data('textbefore', $(this).attr('value')); this.readOnly = false; }); $(".inputs_client").bind('blur', function() { this.readOnly = true; $(this).css("backgroundColor", "white"); $(this).css("color", "black"); }); $(".inputs_client").bind('change', function() { if (!confirm('Вы уверены?')) { $(this).attr('value', $(this).data('textbefore')); textbefore = null; } else { $(this).attr('value', this.value); textbefore = null; } }); Примерно так. |
Цитата:
$(this).data("textbefore", $(this).attr('value')); Зачем использовать этот метод? Он вроде делает такое же присвоение, только ещё события вещает дополнительные к этому объекту. Чем не устроил? var textbefore = $(this).attr('value'); И вот ещё строчка мне не понятная: $(this).bind('change.myEvent', function() { Что ещё за "myEvent"? |
Цитата:
Цитата:
В документации все есть. |
Часовой пояс GMT +3, время: 21:56. |