Переопределение поведения тегов привязки по умолчанию с помощью jquery - PullRequest
17 голосов
/ 06 марта 2011

Я пытаюсь переопределить поведение по умолчанию тега привязки, чтобы я мог загрузить веб-страницу на моем сервере в существующий div, а не в новую вкладку или окно.

пока у меня есть:

myContainer.click(function(){                   
                    event.preventDefault();
                    $('a').click(function(){
                        var link = $(this).attr('href');
                        myContainer.load(link);
                    });
            });

В Chrome мне нужно дважды щелкнуть ссылку, прежде чем что-то делать, в IE FF он вообще не работает и обновляет страницу с новой ссылкой.

Любая помощьвысоко ценится.

Ответы [ 2 ]

25 голосов
/ 06 марта 2011

Разве это не должно быть просто:

 $('a').click(function(e) {
     e.preventDefault(); 
     myContainer.load(this.href);
 });

Ваш код назначает обработчик кликов внутри обработчика кликов.Таким образом, первый щелчок прикрепит обработчик щелчка к ссылке, а второй щелчок (по ссылке) выполнит новый обработчик щелчка.

Кажется, вынужен только один обработчик кликов.Если ссылки добавляются динамически, вы можете использовать .on() (преемник .live и .delegate):

myContainer.on('click', 'a', function(e) {
     e.preventDefault(); 
     myContainer.load(this.href);
});

// or

$(document).on('click', 'a', function(e) {
     e.preventDefault(); 
     myContainer.load(this.href);
});
3 голосов
/ 06 марта 2011

Вы забыли передать событие:

myContainer.click(function(event){
event.preventDefault();
 $('a').click(function(){ var link = $(this).attr('href');
 myContainer.load(link);
 });
 });

попробуй переставить их:

myContainer.ready(function(){
    $('a').click(function(event){
    event.preventDefault();
    var link = $(this).attr('href');
     myContainer.load(link);
     });
     });
...