Дело в том что вы вешаете событие 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;
}
});
Примерно так.