Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.09.2012, 19:13
Аспирант
Отправить личное сообщение для prowoke Посмотреть профиль Найти все сообщения от prowoke
 
Регистрация: 09.12.2010
Сообщений: 56

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('Вы уверены?'). Помогите, пожалуйста, если вы поняли меня. А если не поняли, то поправьте, я всё объясню.
Ответить с цитированием
  #2 (permalink)  
Старый 04.09.2012, 23:42
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

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


Примерно так.
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #3 (permalink)  
Старый 05.09.2012, 16:26
Аспирант
Отправить личное сообщение для prowoke Посмотреть профиль Найти все сообщения от prowoke
 
Регистрация: 09.12.2010
Сообщений: 56

Сообщение от walik Посмотреть сообщение
Дело в том что вы вешаете событие change каждый раз когда срабатывает событие dblclick. Вариантов два, либо снимать событие по окончанию редактирования, либо изначально вешать только один раз (вне функции).

Примерно так.
Спасибо. Всё работает, всё понятно. Но, есть пара вопросов по следующим строчкам:

$(this).data("textbefore", $(this).attr('value'));


Зачем использовать этот метод? Он вроде делает такое же присвоение, только ещё события вещает дополнительные к этому объекту. Чем не устроил?
var textbefore = $(this).attr('value');


И вот ещё строчка мне не понятная:

$(this).bind('change.myEvent', function() {


Что ещё за "myEvent"?

Последний раз редактировалось prowoke, 05.09.2012 в 16:29.
Ответить с цитированием
  #4 (permalink)  
Старый 05.09.2012, 17:14
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Сообщение от prowoke
Зачем использовать этот метод?
Если сохранять в переменную, то ее пришлось бы делать глобальной (обращаться к ней же мы будем из одной функции, а создавать в другой)

Сообщение от prowoke
Что ещё за "myEvent"?
Это как бы псевдоним нашего события, если его не использовать то будем снимать абсолютно все события change (мало ли может кто то тоже будет использовать это событие у этого элемента). Поэтому используем псевдоним, что бы работать только с нашим событием (называть вы его можете как хотите).

В документации все есть.
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие click вызывается несколько раз. Почему? rusbody jQuery 22 21.08.2012 16:17
[GM] Нежалательный запуск скрипта несколько раз VitAl2013 Firefox/Mozilla 5 01.08.2012 11:58
Обработчик click вызывается несколько раз или не всегда вызывается OlegJquery jQuery 2 21.07.2011 20:37
Запуск функции несколько раз подряд с разными параметрами ZaetS Общие вопросы Javascript 0 07.04.2011 19:43
live click выполняется несколько раз hara jQuery 9 09.06.2010 10:58