0

ページにウィジェットがあります。ウィジェットの任意の部分をクリックすると、そのウィジェットに関する詳細が記載された次のページに移動する必要があります。そのウィジェット内で利用可能な「いいね」という名前のスパンをクリックすると、ダイアログが開く必要があります。しかし、代わりに、そのリンクをクリックしても次のページに移動しています..

そのリンク以外のウィジェットの任意の部分をクリックすると、次のページに移動する必要があります..

これはクリックの通常のコードです:

 $('td#' + parentElement).find('div.streamcontenttopmain').click(function() {
            window.location.href = 'TaskDetails.aspx?id=' + json_row.id + '&community=' + getQueryParam('community');
        });

このコードは、ウィジェット内の任意の場所をクリックすると、次のページに移動します

私のスパンは次のように定義されています:

<span class="flft likes" style="MARGIN-LEFT: 2px">

これは私が試したことです:

 $('td#' + parentElement).find('div.streamcontenttopmain').click(function (e) {

            if ($(this).hasClass("flft likes")) {

                alert("hi");
            } else {
                window.location.href = 'TaskDetails.aspx?id=' +
                               json_row.id +
                               '&community=' +
                               getQueryParam('community');
            }
        }); 
4

3 に答える 3

2

イベントが要素にバブリングし、divそれらのイベント ハンドラーをトリガーするのを停止できます。

$('#' + parentElement).find('span.likes').click(function(e) {
    e.stopPropagation();

    // ...
});
于 2012-10-05T07:19:33.737 に答える
1

イベントの伝播を停止すると、div に到達することなくスパン内で処理できます。それは以下のようになります

$('td#' + parentElement).find('div.streamcontenttopmain').click(function(e){
      window.location.href = 'TaskDetails.aspx?id=' + 
                               json_row.id + 
                               '&community=' + 
                               getQueryParam('community');
})).find('span.likes').click(function(e) {
           e.stopPropagation();
           //do the span specific stuff here
});
于 2012-10-05T07:20:14.923 に答える
1

次のようなこともできます:

$(document).ready(function(){
    $('div').click(function(e){
        if(e.toElement.nodeName == "SPAN")
            alert('span clicked');
        else
            alert('div clicked');
    });
});

私はこのデモでそれを示しました: http://jsfiddle.net/SxhWy/3/

于 2012-10-05T07:26:54.527 に答える