Jquery.click() event.preventDefault() не работает
Я создаю веб-приложение, которое можно расширять, отбрасывая скрипты в предварительно заданный каталог. script должен прочитать заголовки файлов перед тем, как перейти на страницу, поэтому мне нужно использовать .preventDefault(), когда ссылки будут нажаты, и сначала запустите некоторый JScript. К сожалению, я не могу пройти через .preventDefault()
Вот мой формат ссылки:
<a href="path/to/file.php" class="filelink">Some Text</a>
здесь jquery, который я пытаюсь использовать, чтобы остановить действие по умолчанию:
$( '.filelink' ).click( function( e ) {
e.preventDefault();
//do some other stuff here
});
EDIT:
Дополнительная информация:
<script>...</script>
находится в нижнем колонтитуле.
Эта функция INSIDE $(document).ready
ПОСЛЕ вызова $.ajax
, который строит список ссылок, которые эта функция пытается прослушать клики.
Ответы
Ответ 1
Поскольку ваши ссылки добавляются динамически на страницу, вам нужно использовать document.on()
для захвата событий щелчка.
синтаксис добавления слушателей событий в динамический контент выглядит следующим образом
$(document).on( event, selector, callback );
чтобы ваш обработчик кликов стал:
$(document).on('click','.filelink',function(e){
e.preventDefault();
//code here
return false;
});
Ответ 2
Я думаю, вы пропустили
$ (Документ).ready()
Обновите свой код следующим образом:
$(document).ready(function(){
$( '.filelink' ).click( function( e ) {
e.preventDefault();
//do some other stuff here
});
})
Ответ 3
- ваш код, окруженный:
$(function(){
//your code here
});
? или
$(document).ready(function(){
//your code here
});
?, потому что вы должны подождать, пока элемент <a></a>
не будет готов, прежде чем добавлять к нему своего слушателя. попробуйте код выше или поместите свой код в нижней части html прямо перед тегом </body>
или сразу после элемента <a></a>
. которые должны работать
РЕДАКТИРОВАТЬ:, так как ваши ссылки добавляются, динамически вызывают функцию $( '.filelink' ).click()
сразу после добавления
Ответ 4
У меня была та же проблема, потому что я изменил window.location.search в обработчике событий:
$( '.filelink' ).click( function( e ) {
e.preventDefault();
window.location.search = "something";
});
Чтобы исправить мою проблему, я использовал window.location.hash
(что больше того, чего я хотел).
Ответ 5
Для меня проблема заключалась в синтаксической ошибке в коде Javascript.
Я заменил переменную php на одну из переменных JS, как показано ниже,
var myvar = "<?php echo $myvar; ?>";
который дал следующий результат,
var myvar = "value in "myvar" which is not escaped";
Это сработало, когда я экранировал переменную.
Пожалуйста, проверьте, есть ли какая-либо синтаксическая ошибка в вашем коде.