Остановить ссылку href после вызова функции onClick - PullRequest
3 голосов
/ 15 июня 2011

У меня есть ссылка:

<h2><a href=?p=article&aid='.$article->id.'" onclick="loadPage('article'); return false;">.$article->title.</a></h2>

и он вызывает эту функцию:

function loadPage(page){
    $("#content").html("Loading...");

    $.post("page.php", {p: page}, function(data){
        $("#content").html(data);   
    });
}

Но после того, как мой javascript был запущен, href все еще активен. Я использовал return false; на моем onClick прежде, чтобы предотвратить это, но на этот раз он не работает ????

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Похоже, ваш скрипт имеет ошибку и не достигает блока возврата. Если вы добавите try catch, он будет игнорировать ошибки в скрипте.

function loadPage(page){
try{
    $("#content").html("Loading...");

    $.post("page.php", {p: page}, function(data){
        $("#content").html(data);   
    });
} catch(err){}
}
1 голос
/ 15 июня 2011

Мой любимый способ сделать это - заменить атрибут href.Преимущество этого заключается в сохранении совместимости с клиентами, не являющимися JS, и в отсутствии необходимости «останавливать» событие или любое другое волшебство.Например:

function unobtrusiveLinkSetup(link) {
    // replace the about link's href
    J(link).attr('jshref', J(link).attr('href'));
    J(link).removeAttr('href');

    // handle the link's action
    J(link).click(function(index) {
            J(this).stop();
            // make a request in the background
            J.get(J(this).attr('jshref'), function(result) {
                // whatever you need to do with the link..
            });
    });
}

Тогда вы можете просто сделать unobtrusiveLinkSetup("#myLink"); в функции готовности вашего документа или где-либо еще.

1 голос
/ 15 июня 2011

Возможно, лучше использовать jQuery для привязки события click к вашей функции, так как логика лучше разделена.

$('h2 a').click(function(event) {
    $("#content").html("Loading...");

    $.post("page.php", {p: page}, function(data){
        $("#content").html(data);   
    });

    return false;
});

Обычно, если href все еще активен, вероятно, произошла ошибка JavaScript.

Edit: Вы также можете использовать event.preventDefault () , чтобы остановить href, сопровождаемый функцией щелчка, связанной таким образом.

Наконец, href выглядит очень хорошо сформированным (пропуская вводную цитату). Это опечатка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...