Я настраиваю элемент ссылки и вызываю его событие щелчка в jquery, но событие щелчка вызывается дважды, см. Ниже код jquery.
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
Пожалуйста, порекомендуйте.
Спасибо.
Ответы:
Убедитесь, что вы случайно не включили свой скрипт дважды в свою HTML-страницу.
источник
Отменить привязку перед кликом;
источник
Это означает, что ваш код дважды включал скрипт jquery. Но попробуйте это:
источник
Я попробовал,
e.stopImmediatePropagation()
; Мне кажется, это работает.источник
В моем случае я использовал приведенный ниже сценарий для решения проблемы.
off()
развязывает все события, к которым привязаны#id
. Если вы хотите отвязать толькоclick
событие, используйтеoff('click')
.источник
Просто вызовите .off () прямо перед вызовом .on ().
Это удалит все обработчики событий:
Чтобы удалить только зарегистрированные обработчики событий click:
источник
Довольно распространенное решение проблемы с двумя щелчками мыши - это установка
в конце вашей функции (при условии, что вы ее используете
function(e)
). Это предотвращает всплытие события, которое может привести ко второму выполнению функции.источник
У меня была такая же проблема, но вы можете попробовать изменить этот код
к этому:
Для меня этот код решил проблему. Но будьте осторожны, чтобы случайно не включить ваш скрипт дважды на вашу HTML-страницу. Я думаю, что если вы делаете эти две вещи правильно, ваш код будет работать правильно. Спасибо
источник
пожалуйста, попробуйте это
источник
Это определенно ошибка, особенно когда это FireFox. Я много искал, пробовал все приведенные выше ответы и, наконец, получил это как ошибку от многих экспертов по SO. Итак, я наконец-то пришел к этой идее, объявив переменную типа
Таким образом, он сначала проверяет, была ли функция ранее вызвана или нет.
источник
Добавление
e.preventDefault();
в начале моей функции сработало для меня.источник
Это старый вопрос, но если вы используете делегирование событий, это у меня вызвало его именно это.
После удаления
.delegate-two
перестал выполняться дважды. Я считаю, что это происходит, если оба делегата присутствуют на одной странице.источник
этот фрагмент кода не содержит ничего плохого. Это еще одна часть вашего сценария, как сказал @karim
источник
В моем случае он отлично работал в Chrome, и IE
.click()
дважды вызывал . если это была ваша проблема, я исправил ее, вернув false после вызова.click()
событияисточник
Звонок
unbind
решил мою проблему:источник
Я не уверен, почему, но у меня была проблема с
Когда я изменил его на
Проблема решена. Но в моем коде определенно что-то не так.
источник
Меня обманули, выбрав несколько элементов, и каждый из них был нажат.
:first
помогло:источник
У меня тоже была эта проблема с FF. Однако мой тег был привязан к
<a>
тегу. Хотя<a>
тег никуда не делся, он все равно дважды щелкнул. Вместо этого я заменил<a>
тег на<span>
тег, и проблема с двойным щелчком исчезла.Другой вариант - полностью удалить атрибут href, если ссылка никуда не денется.
источник
Я столкнулся с этой проблемой, потому что мой
$(elem).click(function(){});
скрипт был встроен в div, для которого было установлено значениеstyle="display:none;"
.Когда отображение css было переключено на блокировку, сценарий добавлял прослушиватель событий во второй раз. Я переместил сценарий в отдельный файл .js, и прослушиватель повторяющихся событий больше не запускался.
источник
Когда я использую этот метод на странице загрузки с помощью jquery, я пишу
$('#obj').off('click');
перед установкой функции щелчка, чтобы пузырь не появлялся. Работает для меня.источник
Мой простой ответ заключался в том, чтобы превратить привязку клика в функцию и вызвать ее из onclick элемента - сработало удовольствие! тогда как ничего из вышеперечисленного не
источник
Если ваше мероприятие звонит дважды, три или больше, это может помочь.
Если вы используете что-то подобное для запуска событий…
… Затем обратите внимание на количество
.js-someclass
элементов на странице, потому что это вызовет событие щелчка для всех элементов, а не только один раз!Тогда простое исправление - убедиться, что вы запускаете щелчок только один раз, выбрав только первый элемент , например:
источник
Конечно, где-то еще в вашем скрипте (ах) событие «щелчок» снова привязывается к тому же элементу, как предлагают несколько других ответов / комментариев.
У меня была аналогичная проблема, и чтобы убедиться в этом, я просто добавил
console.log
команду в свой сценарий, как в следующем фрагменте:Если при нажатии кнопки вы получаете что-то похожее на изображение ниже из консоли разработчика вашего браузера (как это сделал я), то вы точно знаете, что
click()
событие было дважды привязано к одной и той же кнопке.Если вам нужен быстрый патч, решение, предложенное другими комментаторами использования
off
метода (кстатиunbind
, устарело с jQuery 3.0), чтобы отвязать событие перед (повторной) привязкой, оно работает хорошо, и я тоже рекомендую его:К сожалению, это временный патч! Как только проблема осчастливления вашего босса будет решена, вам действительно стоит еще немного углубиться в свой код и исправить проблему «дублированной привязки».
Фактическое решение, конечно же, зависит от вашего конкретного варианта использования. В моем случае, например, возникла проблема «контекста». Моя функция вызывалась в результате вызова Ajax, примененного к определенной части документа: перезагрузка всего документа фактически перезагружала контексты «страницы» и «элемента», в результате чего событие было дважды привязано к элементу .
Мое решение этой проблемы заключалось в использовании функции jQuery one , которая аналогична функции on, за исключением того, что событие автоматически отключается после его первого вызова. Это было идеально для моего варианта использования, но, опять же, это могло быть не решение для других вариантов использования.
источник
Была такая же проблема. Это сработало для меня -
Надеюсь, это кому-то поможет.
источник
В моем случае HTML был выложен так:
И мой jQuery был таким:
Это смутило меня, потому что ничего не происходило. Проблема заключалась в том, что внутренний
.share
stoggle
отменял внешний.share
stoggle
.источник
Я решил эту проблему, изменив тип элемента. вместо кнопки помещаю ввод, и эта проблема больше не возникает.
помимо:
заменить:
источник