Событие размытия не запускается - не удается найти обходной путь для работы с текстовым полем " скрыть размытие
TL; DR как я могу получить этот самоочевидный JSFiddle работать?
событие размытие происходит, когда элемент теряет фокус либо с помощью указывающего устройства или клавиш навигации. Это событие допустимо для следующих элементов: LABEL, INPUT, SELECT, TEXTAREA и BUTTON.
основная идея, HTML:
<form>
<label>
<input type="text" />
<a href="#">after focusing in input, there should be no blur when clicking here</a>
</label>
</form>
<a href="#">but blur should fire when clicking here</a>
и JS:
$("form, label").on("blur", function() {
alert("you're not going to see this");
});
это не работает. Более наглядный пример приведен в это JSFiddle.
я тоже пробовал focusout
С это JSFiddle, но (предположительно, потому что он пузырится от входа), он всегда срабатывает.
Я, вероятно, мог бы настроить то, что мне нужно с помощью такого взлома:https://stackoverflow.com/a/5049387/458614
7 ответов
что я думаю, что вы ищете
e.stopPropagation();
эта скрипка здесь показывает немного другой способ справиться с этим ... он поместил hide на щелчок окна (который в любом случае размыл бы вход), кроме метки, что позволило бы событию click остановиться внутри метки.
удачи в кодировании!
используйте приведенный ниже код для достижения желаемого
$(document).on("blur", "label",function() {
$("div").append("form or label blurred<br>");
});
вот демо Скрипка
попробуйте это, он должен работать
.focus {
border-color:red;
}
$(document).ready(function() {
$('input').blur(function(){
$('input').removeClass("focus");
})
.focus(function() {
$(this).addClass("focus")
});
});
добавьте этот кусок js в свою скрипку. вы добавили прослушиватель для метки, но размытие происходит на теге anchor.
$("form a").on("blur", function() {
$("div").append("form or label blurred<br>");
});
согласно вашему объяснению, я создал демо
$("form > label >a").on("blur", function() {
return false
});
$("#outsideform > a").on("blur", function() {
alert("but blur should fire when clicking here");
});
некоторое время я публикую промежуточную разработку. Но это определенно поможет вам, где именно вы должны искать. реализация jquery, но не ваш javascript. этой это реальная проблема.
я добавил 3 строки в разных местах. никаких больших изменений.
- добавил
|| $("input").css("visibility") == "visible"
в if условие - добавил
$("input").css("visibility","hidden");
к внутреннему условию else -
$("input").css("visibility","visible");
к внешнему (и последнему) другое условие.
обратите внимание, что это промежуточное, вам нужно нажать дважды после отправки непустого текста. Если у меня будет время, я отправлю правильную рабочую вещь. этой - это скрипка.
tobek, ваш JSFiddle с моей лучшей попыткой почти нет. Проблема заключается в вашем селекторе внизу в этом разделе кода:
$("input").on("blur", function(){
$("input").hide();
});
вы правильно сформулировали проблему в своих комментариях, когда сказали:"проблема: мы никогда не попадаем сюда, потому что она уже скрыта, потому что вход размыт".
измените вышеуказанный раздел на этот, и я думаю, у вас будет то, что вы ищете.
$("input-blur label").on("blur", function(){
$("input").hide();
});
потому что "добавить тег" ссылка находится внутри метки, щелкая по ней, не запускает вашу функцию "размытия".