0

一部のハイパーリンクでpreventDefaultアクションを使用して、ハイパーリンクがアクティブ化されないようにしようとしています。代わりに、いくつかのajaxを呼び出しています。ただし、機能していないようです。

私が使用しているコードは次のとおりです。次のコードがあります。

    $("#" + container_id + " a[id^=read_more_link]").click(function(event){
        alert($(this).html());
        event.preventDefault();
});

ここで興味深いのは、アラートボックスが起動するため、クリックイベントが確実に登録されることですが、preventDefault()呼び出しを認識していないようです。

コードを単純化する簡単なテストを試しましたが、それでも機能しません。

<a id="read_more_link" data-article_id="1" href="news/1">Read More</a>

    $("#read_more_link").on("click", function(event){
        alert("test");
        event.preventDefault();
    });

警告ボックスが表示されますが、ページはリンクをたどります。

注:「ReturnFalse」を使用した場合は機能しますが、preventDefaultは使用しません

4

3 に答える 3

1

はい、どうぞ!

function(e){
    e = e || window.event;
    e.preventDefault();    
}

フィドル: http: //jsfiddle.net/rXCcB/2/

編集:11684が正しく指摘しているように、詳細な説明が役立ちます。

一部のブラウザは、イベントに関するすべての情報を含むをeとして認識します。window.eventこの場合、操作しようとしているクリックイベント。他のいくつかのブラウザーはそうではないので、関数の最初のステップで行われるのは、の定義に関するすべてのブラウザーにわたる正規化ですe。最終結果は、すべてのブラウザがあなたの意味を正確に理解していることを知っているので、その時点で安全に使用できるeポイントへのすべての参照です。window.evente.preventDefault()

于 2012-12-19T19:10:47.080 に答える
1

親を持つリンクのデフォルトのアクションを妨げているようです。セレクターは次のようになります。

私のhtmlは:

<p id='aaa'>
   <a id='read_more_link' href='#'>adf</a>
</p>

jquery:

var container_id = $('#aaa');
$("a[id^='read_more_link']", container_id).click(function(event) {
   alert($(this).html());
   event.preventDefault();
});

フィドルをチェックアウト: http://jsfiddle.net/EEZEe/

これがあなたを助けるかどうか見てください。

于 2012-12-19T19:13:51.627 に答える
1

少なくとも 1 つの簡単な方法と、より良い方法があります。

より簡単に:

$("#" + container_id + " a[id^=read_more_link]").click(function(){
    alert($(this).html());
    return false;
});

イベント パラメータを使用する必要はなく、関数を呼び出す必要もありません。

より良い:

リンクの代わりにボタンを使用します。

<p id='aaa'>
   <button id='read_more_link' type='button'>adf</button>
</p>

ボタンはまさにこのイベント用に作成されているため、この問題に遭遇することはありません。リンクはリンクのために作成されたものであり、機能する場合もありreturn falseますpreventDefault()が、回避策です。

于 2012-12-19T19:22:09.280 に答える