2


0

次のイベントを起動しますが、その後は起動しません

ページの場合、次のようにラベル内にラップされたリンクが与えられています。

    Links to another page.

ユーザーがすべてのブラウザーでリンクをクリックすると、ページは想定どおり新しいタブに表示されますが、Firefoxではラベルにリンクされたチェックボックスも選択されます。 これは望ましくない動作です。

リンクをポップするためにjQueryを実行しますが、その後イベントを強制終了します。 私は次のものを持っていますが、それはうまくいきますが、あまりエレガントではありません:

$(document).ready(function(){
    $('label a').click(function(e){
        open($(this).attr('href'), $(this).attr('target'));
        return false;
    });
});

要素の動作を手動で複製してイベントを強制終了するよりもエレガントな方法を考えている人はいますか?

'' '' '

余談ですが、「stopPropagation」を使って試しましたが、あまり成功していません。

また、上記の解決策はうまくいくことに注意してください。ただし、イベントが最初の呼び出しを超えて伝播するのを一般的に阻止するための、よりエレガントなものを探しています。 (最初のネイティブ呼び出し。 コールバックを追加する場合、ネイティブ要素の動作は起動しますが、親の動作は起動しません。

ありがとう、ジョー

7 Answer


1


イベントがラベルで伝播しないようにしてください。

$(document).ready(function(){
    $('label').click(function(e){
        e.stopPropagation();
    });
});


0


$(elem).one(fn)を使用できます-http://api.jquery.com/one/


0


htmlを次のように変更する必要があるかもしれません。

Links to
another page.

JavaScriptをまったく使用しませんか?


0


クライアント側でhtmlを変更することが許可されている場合、リンクをラベルの外にいつでも移動できます。

$(document).ready(function(){
    $('label').find('a').each(function(){
        var $anchor = $(this);
        $(this).closest('label').after($anchor);
    });
});​


0


これです:

 test Test

あるいは:

 test Test

そしてjs:

$('a').click(function(e){
    var t=$(this);
    window.open(t.attr('href'), t.attr('target'));
    return false;
});

私のために働きます。 たぶん、あなたのスクリプトを妨害するような問題がありますか?


0


`.click()`の代わりに `.one()`を使用してみてください:

$(document).ready(function(){
    $('label a').one(function(e){
        open($(this).attr('href'), $(this).attr('target'));
        return false;
    });
});


0


KISS

$(document).ready(function(){
    $('label a').click(function(e){
        open($(this).attr('href'), $(this).attr('target'));
        $(this).parent().click(); //Click the label again to reverse the effects of the first click.
        return false;
    });
});