1

私は初心者のコーダーなので、この問題はあなたを笑顔にするかもしれませんが、解決策が見つかりません。

リンクがあります:

 <div class="comments"><a href="#" onclick="get_comments('.$row['post_id'].')">'.$comments_no.' comments</a></div>

どのクリックが機能をトリガーします:

 function get_comments(id) {
 x = "#cf"+id;
 y = "#comments"+id;
 $(x).toggle(100);
 var dataString = id;
 $(".loading").ajaxStart(function () {
 $(this).show();
 });
 $(".loading").ajaxStop(function () {
 $(this).hide();
 });

 $.ajax({
 type: 'POST',
 url: 'load_comments.php',
 data: {'dataString':dataString},
 cache: false,

 success: function(data){
 $(y).html(data);
 }
 });
 return false;    
 };    

実際にリンクをクリックするまでは、すべて正常に動作します... リンクをクリックするたびに、ページのトップに移動します。この問題を解決する方法を教えてもらえますか?

4

5 に答える 5

2

使用しhref="#"ても問題ありませんが、 preventDefault 関数が表示されません。

これを試して:

HTML:

<div class="comments">
    <a href="#" class="comments-click" data-id="'.$row['post_id'].'">'.$comments_no.' comments</a>
</div>

JS:

$(document).ready(function() {
    $('.comments-click').click(function(event) {
        event.preventDefault(event);
        id = $(this).data('id');
        /* ... */
    });
});

属性に.data()アクセスできdata-*ます。

より.click()も優れたイベント ハンドラーがある場合はonclick、イベントを渡し ([#] をクリック)、それを防止してください!

JSFiddle: http://jsfiddle.net/aCLyw/2/

http://api.jquery.com/event.preventDefault/

(回答を1000回編集して申し訳ありません)

于 2013-08-24T11:41:19.183 に答える
1

イベントハンドラから false を返す必要があります

<div class="comments"><a href="#" onclick="return get_comments('.$row['post_id'].')">'.$comments_no.' comments</a></div>
于 2013-08-24T11:18:11.930 に答える
0

A-Tag を JavaScript ボタンとして使用 (または悪用) する場合、デフォルトの動作 (つまり、リンクをたどる) を防止する 2 つのオプションがあります。

javascript: ボイド 0

を設定する代わりにhref="#"、それを使用して作業を完了し、次のように返しundefinedますhref="javascript: void(get_comments('.$row['post_id'].'))"。の詳細については、この回答を参照してくださいvoid

event.preventDefault

より良い方法は、HTML と JavaScript を分離し (控えめな JavaScriptを参照)、イベント ハンドラーを使用することです。JS では、ハンドラーを DOM-Element に追加するだけです。

<a id="commentsLink" data-id=".$row['post_id']." href="#">comments</a>

var commentsLink = document. getElementById("commentsLink");
commentsLink.addEventListener("click", function(event) {
  var postId = event.target.getAttribute("data-id");
  // your code
  event.preventDefault();
}
于 2013-09-25T07:52:47.673 に答える
0

これにより、次の動作が発生します。href="#"

したがって、必要がない場合は、href で javascript 関数を呼び出すか、この属性を使用しないで、アンカーをリンクのように設計する必要があります。

href="#"ページの先頭に移動することを意味します。別の参照を使用できます。 つまり、id foo でhref="#foo"ジャンプすることを意味します。<hr>

可能な解決策:

<a href="javascript:get_comments('.$row['post_id'].')">

また

<a onclick="get_comments('.$row['post_id'].')" class="mylink">

href を削除するとリンクに見えなくなるので、.mylink クラスでスタイルします。

于 2013-08-24T11:26:22.323 に答える
0

これを試してください、うまくいきます

 <div class="comments"><a href="Javascript:void(0)" 
  onclick="get_comments('.$row['post_id'].')">'.$comments_no.' comments</a></div>
于 2013-08-24T11:44:59.077 に答える