15

重複の可能性:
jQuery 1.7 - live() を on() に変える

//解決策:承認された回答が提案したように4つのオカレンスを置き換えただけで、目立たないajaxプラグインが起動し、jquery 1.9.0で再び動作します

更新//これを解決する最良の方法である、下部にマークされた回答のコメントを確認してください。

//元の投稿: jQuery 1.9.0 にアップグレードしましたが、控えめな ajax プラグインが live メソッドを廃止したためダウンしました。アップグレードにより別のバグが修正されるため、このように置き換えようとしました。しかし、うまくいきません。live を次のように on に置き換えただけです。

$("a[data-ajax=true]").on("click", function (evt) {
        evt.preventDefault();
        asyncRequest(this, {
            url: this.href,
            type: "GET",
            data: []
        });
    });

    $("form[data-ajax=true] input[type=image]").on("click", function (evt) {
        var name = evt.target.name,
            $target = $(evt.target),
            form = $target.parents("form")[0],
            offset = $target.offset();

        $(form).data(data_click, [
            { name: name + ".x", value: Math.round(evt.pageX - offset.left) },
            { name: name + ".y", value: Math.round(evt.pageY - offset.top) }
        ]);

        setTimeout(function () {
            $(form).removeData(data_click);
        }, 0);
    });

    $("form[data-ajax=true] :submit").on("click", function (evt) {
        var name = evt.target.name,
            form = $(evt.target).parents("form")[0];

        $(form).data(data_click, name ? [{ name: name, value: evt.target.value }] : []);

        setTimeout(function () {
            $(form).removeData(data_click);
        }, 0);
    });

    $("form[data-ajax=true]").on("submit", function (evt) {
        var clickInfo = $(this).data(data_click) || [];
        evt.preventDefault();
        if (!validate(this)) {
            return;
        }
        asyncRequest(this, {
            url: this.action,
            type: this.method || "GET",
            data: clickInfo.concat($(this).serializeArray())
        });
    });
4

1 に答える 1

12

(委譲)をlive使用するのと同じことは次のとおりです。on

$(document).on("click","a[data-ajax=true]", function (evt) {...});

jquery の.on()メソッド ドキュメントは次の場所にあります。

>> http://api.jquery.com/on/ <<

.on() メソッドは、jQuery オブジェクトで現在選択されている要素のセットにイベント ハンドラーをアタッチします。jQuery 1.7 以降、.on() メソッドは、イベント ハンドラーをアタッチするために必要なすべての機能を提供します。古い jQuery イベント メソッドからの変換については、.bind().delegate()、および.live()を参照してください。

.on() でバインドされたイベントを削除するには、 .off()参照してください 。1 回だけ実行されてから削除されるイベントをアタッチするには、 .one()を参照してください。

于 2013-01-18T18:27:46.003 に答える