Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: как определить по кому кликнули при событие blur
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Мне нужно в обработчике blur-а как-то определить по какому элементу произошел клик и в результате было вызвано событие blur у текущего инпута. Подскажите, пожалуйста, как это можно узнать. Спасибо.
И подскажите, пожалуйста, что раньше происходит blur или click? Какое из этих событий обрабатывается первым.
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
this
Pavelbeginner
Отправлено: 15 Августа, 2013 - 11:05:31
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
teddy пишет:
this
Что this? this будет указывать на инпут, который потерял фокус.
armancho7777777
Отправлено: 15 Августа, 2013 - 11:07:40
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner пишет:
что раньше происходит blur или click
А самому проверить не судьба ?
EuGen
Отправлено: 15 Августа, 2013 - 11:08:03
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Pavelbeginner
Вам нужна передача параметров событию. Пример есть здесь
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
armancho7777777
Отправлено: 15 Августа, 2013 - 11:08:51
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner пишет:
Мне нужно в обработчике blur-а как-то определить по какому элементу произошел клик и в результате было вызвано событие blur у текущего инпута.
Ничего не понял...
Pavelbeginner
Отправлено: 15 Августа, 2013 - 11:09:06
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
armancho7777777 пишет:
Pavelbeginner пишет:
что раньше происходит blur или click
А самому проверить не судьба ?
Ну что за ответ блин. Сам миллион раз проверить могу, да хоть 2 миллиона раз, но я не буду уверен, что во всех браузерах, во всех версиях будет одинаковое поведение. Поэтому и спрашиваю в догонку к основному вопросу. Боже мой, ну сколько можно наезжать, вместо того, чтобы давать полезную информацию? (Добавление)
armancho7777777 пишет:
Pavelbeginner пишет:
Мне нужно в обработчике blur-а как-то определить по какому элементу произошел клик и в результате было вызвано событие blur у текущего инпута.
Ничего не понял...
Опять хотите сказать, что неясно сформулировал вопрос?
В инпуте установлен фокус. Кликнули куда-то и произошла потеря фокуса, в обработчике blur мне нужно определить по какому элементу dom кликнули и инпут потерял фокус.
armancho7777777
Отправлено: 15 Августа, 2013 - 11:13:27
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner, потому что Вы ленивы.
Эта тема ни первая Ваша.
Вам проще на форуме спросить, чем самому проверить.
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Pavelbeginner, такое ощущение, что все тут сидят и днями во всех браузерах все подгоняют по пикселям и миллисекундам.
Проверили в основных браузерах, норм работает. Сверились со спекой, все ок.
Не нужно с каждым вопросом про кроссбраузерность лезть на форум (caniuse, quirksmode, SO в помощь)
Вот когда найдете несоответствие которое не решается, лучше тогда спросите.
armancho7777777
Отправлено: 15 Августа, 2013 - 11:21:55
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner пишет:
Опять хотите сказать, что неясно сформулировал вопрос?
Конечно.
Вопрос размытый, можно его понять по разному.
Pavelbeginner пишет:
В инпуте установлен фокус. Кликнули куда-то и произошла потеря фокуса, в обработчике blur мне нужно определить по какому элементу dom кликнули и инпут потерял фокус.
Вот, другое дело.
Так как событие blur возникает раньше события click, то можно например так:
Как это может помочь? Внутри обработчика blur устанавливается обработчик click-а, который будет вызван уже после того, как завершится обработчик blur-а...
armancho7777777
Отправлено: 15 Августа, 2013 - 11:48:39
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner пишет:
который будет вызван уже после того, как завершится обработчик blur-а...
И ?
armancho7777777 пишет:
событие blur возникает раньше события click,
Я же говорю, Вы формулируете вопрос размыто.
Вы же не писали, что Вам надо определить щелчок мыши прежде, чем произайдёт событие blur...
Может показаться, что в данном случае требуется событие mousedown, а не click, так как оно происходит раньше,
но в таком случае источником события будет само поле.
Так что ничего не выйдет.
Да и это противоречит здравой логике: Вы хотите определить потерю фокуса прежде, чем произошёл тот клик мыши, который вызвал потерю фокуса. Вдумайтесь...
Вы лучше опишите всю задачу, а ни её мизерную часть.
alert('Поле потеряло фокус из-за '+ e.target.nodeName);
});
});
});
Это ответ на Ваш вопрос:
Pavelbeginner пишет:
В инпуте установлен фокус. Кликнули куда-то и произошла потеря фокуса, в обработчике blur мне нужно определить по какому элементу dom кликнули и инпут потерял фокус.
"Кто не согласен, пусть кинет в меня камень", - как сказал бы Остап Бендер
Pavelbeginner
Отправлено: 15 Августа, 2013 - 13:14:33
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Задача следующая:
Есть форма логина. Инпуты в этой форме валидируются по событию blur(точнее валидируется только один инпут потерявший фокус). Также валидация уже всех полей происходит по собмиту кнопки. Кнопке сабмита добавляется класс disabled во время начала валидации, и в ф-цие валидации идет проверка установлен ли у кнопки сабмита этот класс или нет и, если установлен, то делаем return. В конце же валидации этот класс disabled убирается с кнопки, чтобы можно было начать еще одну валидацию по нажатию.
Так вот, если пользователь ввел в инпут данные, затем нажал куда-нибудь на странице, то происходит событие blur и происходит валидация поля. Все хорошо. Но, пользователь может после ввода данных в инпут нажать на кнопку сабмита и последовательность действий такова:
в обработчике события blur мы лочим кнопку сабмита классом disabled. Т.к. в ф-цие валидации присутствуют аякс запросы, то валидация может не закончиться и начнет обрабатываться событие click кнопки сабмита. И снова будет вызвана ф-ция валидации в обработчике click-а. Но т.к. у кнопки установлен класс disabled, то ф-ция не отрабатывает.
Чтобы эта ф-ция отработала я хочу в обработчике blur-а сделать проверку по кнопке сабмита был клик или нет и, если да, то в конце обработчика blur вызвать валидацию формы.
armancho7777777
Отправлено: 15 Августа, 2013 - 13:23:52
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner, попробуйте повесить на кнопку не событие click, а mousedown.
Так же можно использовать флаг для проверки прошла ли валидация, по событию кнопки mousedown.
Покажите код, а то приходится гадать.
DelphinPRO
Отправлено: 15 Августа, 2013 - 13:44:32
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
вы забываете о том, что пользователь может просто нажать ENTER, а не кликать
я думаю стоит отслеживать событие onsubmit, в котором прерывать все обработчики фалидации и проверять форму целиком.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.