jquery toggle по умолчанию вызывает preventDefault (), поэтому значения по умолчанию не работают. нельзя установить флажок, нельзя щелкнуть ссылку и т. д.
можно ли восстановить обработчик по умолчанию?
javascript
jquery
events
preventdefault
event-bubbling
Стейн де Витт
источник
источник
preventDefault
после того, как он был вызван. На данный момент это вопрос: «Как мне отвязать прослушиватель событий с jQuery?».Ответы:
В моем случае:
$('#some_link').unbind('click');
работал как единственный способ восстановить действие по умолчанию.Как видно здесь: https://stackoverflow.com/a/1673570/211514
источник
Это довольно просто
Предположим, вы делаете что-то вроде
теперь, чтобы вернуть его к исходной ситуации, сделайте следующее ...
С этого сайта .
источник
Невозможно восстановить a,
preventDefault()
но вы можете обмануть его :)Если вы хотите пойти дальше, вы даже можете использовать кнопку запуска для запуска события.
источник
источник
в некоторых случаях * вы можете сначала
return false
вместоe.preventDefault()
, а затем, когда вы хотите восстановить значение по умолчаниюreturn true
.* Имеется в виду, когда вы не против всплытия событий и не используете
e.stopPropagation()
вместе сe.preventDefault()
Также см. Аналогичный вопрос (также в переполнении стека)
или в случае флажка вы можете иметь что-то вроде:
источник
Вы можете восстановить действие по умолчанию (если это HREF), выполнив следующие действия:
window.location = $(this).attr('href');
источник
если это ссылка, тогда
$(this).unbind("click");
будет повторно разрешено нажатие на ссылку, и будет восстановлено поведение по умолчанию.Я создал демонстрационную скрипку JS, чтобы продемонстрировать, как это работает:
Вот код скрипки JS:
HTML:
Javascript:
источник
Протестируйте этот код, думаю, решите вашу проблему:
Ссылка
источник
Лучший способ сделать это - использовать пространство имен. Это безопасный и надежный способ. Здесь .rb - это пространство имен, которое гарантирует, что функция отмены привязки работает с этой конкретной клавишей, но не с другими.
ref1: http://idodev.co.uk/2014/01/safely-binding-to-events-using-namespaces-in-jquery/
ref2: http://jqfundamentals.com/chapter/events
источник
Отключить:
Включить:
источник
Метод preventDefault () интерфейса Event сообщает пользовательскому агенту, что если событие не обрабатывается явным образом, его действие по умолчанию не должно выполняться, как обычно. Событие продолжает распространяться как обычно, если один из его прослушивателей событий не вызывает stopPropagation () или stopImmediatePropagation (), любой из которых сразу же прекращает распространение.
Вызов метода preventDefault () на любом этапе потока событий отменяет событие, а это означает, что любое действие по умолчанию, обычно выполняемое реализацией в результате события, не произойдет.
Вы можете использовать Event.cancelable, чтобы проверить, можно ли отменить событие. Вызов метода preventDefault () для неотменяемого события не имеет никакого эффекта.
источник
У меня возникла проблема, когда мне нужно было действие по умолчанию только после завершения некоторого настраиваемого действия (включить в противном случае отключенные поля ввода в форме). Я заключил действие по умолчанию (submit ()) в собственную рекурсивную функцию (dosubmit ()).
источник
if (predef == true)
это более явное, вы добавляете 7 символов в свой JS-код без всякой причины.if (prevdef)
так же читабельно. Кроме того, вы добавили избыточный обработчик анонимных событий, когда он.click(dosubmit)
делает то же самое,.click(function(){dosubmit()})
если не передаются никакие параметры.Используйте логическое значение:
Я использую это в прогрессивном веб-приложении, чтобы предотвратить прокрутку / масштабирование одних «страниц», но разрешить другие.
источник
Вы можете установить для формы 2 класса. После того, как вы установили свой JS-скрипт на один из них, если вы хотите отключить свой скрипт, вы просто удалите класс с привязанным скриптом из этой формы.
HTML:
JS
источник
источник
Я не уверен, что вы имеете в виду: но вот решение аналогичной (и, возможно, той же) проблемы ...
Я часто использую preventDefault () для перехвата элементов. Однако: это не единственный метод перехвата ... часто вам может потребоваться просто «вопрос», после которого поведение будет продолжаться, как прежде, или прекратится. В недавнем случае я использовал следующее решение:
$("#content").on('click', '#replace', (function(event){ return confirm('Are you sure you want to do that?') }));
По сути, «предотвратить по умолчанию» предназначено для перехвата и выполнения чего-то еще: «подтверждение» предназначено для использования в ... ну - подтверждении!
источник