#jquery
#jquery
Вопрос:
После щелчка по элементу я хотел бы отключить click()
этот элемент, пока пользователь не выполнит какую-либо другую задачу. Я видел сообщения, в которых люди говорят, чтобы добавить отключенный атрибут к элементу, но, похоже, у меня это не работает.
Я видел другие сообщения, где они рекомендуют отменить привязку click()
, но тогда нужно дублировать код при повторной привязке click()
. Есть предложения о наилучшем способе сделать это? Спасибо
$("#someElement").click(function(){
//Disable click on #someElement, do some stuff, and show another element
$('#anotherElement').show();
});
$('#anotherElement').click(function(){
//Do some stuff and re-enable #someElement
});
Комментарии:
1. Вам не нужно дублировать какой-либо код при повторной привязке; определите функцию обработчика щелчка как неанонимную и повторно привяжите ее.
Ответ №1:
Вы можете использовать bind
и unbind
:
$("#someElement").click(function(){
$(this).unbind('click');
$('#anotherElement').show();
});
$('#anotherElement').click(function(){
$("#someElement").bind('click');
});
Комментарии:
1. Лично, поскольку эти события происходят
bind
иunbind
несколько раз, я бы добавил пространство имен к событию (например.bind('click.toggled', function(){ });
2. Возможно, я что-то упускаю, но после того, как #someElement получит bind(), у него больше нет исходной функции, привязанной к событию.
Ответ №2:
Не уверен, почему это еще не опубликовано.
Добавьте класс, подобный .is-disabled
, к элементу после его нажатия. Когда другое действие будет завершено, удалите этот класс из элемента.
И определите этот класс следующим образом (поддержка 92% браузеров по состоянию на 29.02.2017,http://caniuse.com/#feat=pointer-events ):
.is-disabled {
pointer-events: none;
}
Ответ №3:
Просто поместите код в свою функцию щелчка внутри этой области:
if (clickable == true)
{
}
И когда пользователю не разрешено нажимать на него, установите clickable
значение false
. Когда пользователю будет разрешено щелкнуть снова, установите clickable
значение true
еще раз.
Не такой профессиональный, как anwser от Sarfraz (его не было, когда я нажал кнопку «Добавить ответ», иначе я бы, вероятно, не опубликовал это), но он работает и прост: p