2

私はWordPressに取り組んでおり、フッターでJavascriptファイルをロードするライブラリを使用しています<script src>
これは私がブロックする必要があるコードです:

var $ =jQuery.noConflict();
jQuery(document).ready(function($) 
{
    jQuery('.at-delete_image_button').live('click', function(e)
    {
        data = { /* ... */ };
        $.getJSON(ajaxurl, data, function(response) { /* ... */ });
        return false;
    });
});

の直後に<script src>、次のように印刷していますが、機能しません。

<script type="text/javascript">
jQuery(document).ready( function($) 
{
    $('.at-delete_image_button').live('click', function (e){
        e.preventDefault();
        e.stopPropagation();
    });
});
</script>

前のコードを見つけた同じQ&Aから、私もこの.die('click');方法を試しましたが成功しませんでした。

[アップデート]

DOMスクリーンショットを追加するのを忘れました。
domスクリーンショット

4

5 に答える 5

3

イベントはハンドラーに到達した時点で既に伝搬されているため、ハンドラーからはpreventDefault()できません。実際のオブジェクト自体または親 (を使用しない) にハンドラーを直接持つ必要があります。.live().live().live()

動的に作成されていない親オブジェクトがある場合、その親で伝播を停止すると、オブジェクト.live()上のハンドラーに到達しなくなりdocumentます。

次のようにできます。

jQuery(static parent selector).on('click', '.at-delete_image_button', function(e) {
    // stop propagation up the parent chain so the click event never gets 
    // to the `document` object where .live() would process it
    e.stopPropagation();
});

static parent selector'.at-delete_image_button'すべてのオブジェクトの静的な親に一致するセレクターです。

于 2012-12-11T04:32:41.460 に答える
2

私は別の方向からそれを見つけて、AJAX アクションにフックしてキャンセルします。

add_action('wp_ajax_their_action', 'my_cancel_their_action', 1);
add_action('wp_ajax_nopriv_their_action', 'my_cancel_their_action', 1);

function my_cancel_their_action() {
    exit;
}
于 2012-12-11T04:45:25.017 に答える
1

e.stopImmediatePropagation()同じ要素の他のハンドラが実行されないようにするために使用する必要があります。独自のハンドラーは、他のハンドラーのに書き込む必要があることに注意してください。

于 2012-12-11T04:35:19.647 に答える
1

死ぬことが最善の解決策です。ただし、呼び出す前に、ライブでプラグインバインドクリックした後に呼び出されることを確認する必要があります。

これを実現するには、プラグインによって提供されるコールバックを使用できます。スクリプトのダウンロード時にリスナーを追加し、die() を使用する前に少しタイムアウトを追加することもできますが、これには、タイムアウトとプラグイン バインド クリック イベントとの間の競合という欠点があります。preventImmediateDefault() を使用すると、同じレースを実行できます - バインドはプラグイン 1 よりも高速になりますか?

于 2013-05-16T11:13:48.960 に答える
0

css を使用してこのボタンの上に非表示のレイヤーを配置するか、css と競合しない場合はクラスの名前を変更して、いくつかのトリックを試すことができます。それは可能で安全な方法だと思います

于 2012-12-11T04:35:22.497 に答える