-1

ここで私が間違っていることを誰かが知っていますか?

var spanclickhandler = $('.officeapprovalspan').click(function () {
    // do some stuff
});

基本的に、私はこれを持っていますspanclickhandler。ページの読み込み時にクラスofficeapprovalspanを持つものはすべて、これがそのクリック イベントに割り当てられます。問題ありません。

別の場所にコードがあります:

$(this).replaceWith('<span class="officeapprovalspan">wero<span>');
$(document).on('click', '.officeapprovalspan', spanclickhandler);

そのため、一部の HTML をこのクラスの新しいスパンに置き換えています。on を使用して、クリック イベントを class のスパンに追加しますofficeapprovalspan。新しいスパンにはクリック ハンドラーがアタッチされていないため、これを行う必要があると思います。

それで問題ありませんが、新しいスパンをクリックすると、次のエラーが表示されます。

ここに画像の説明を入力

私が間違っていることと修正方法を知っている人はいますか?

4

5 に答える 5

1

このclickメソッドはイベント ハンドラーを返さず、jQuery オブジェクトを返します。最初にイベント ハンドラーを定義し、クリック メソッドで使用します。

var spanclickhandler = function () {
    ...

    do some stuff

    ...
};

$('.officeapprovalspan').click(spanclickhandler);
于 2012-04-23T21:30:45.823 に答える
1

このコードのチャンクは、あなたが思っていることをしません (ハンドラー関数が返されないことは確かです):

var spanclickhandler = $('.officeapprovalspan').click(function () {
    ...

    do some stuff

    ...
});

次のようにコーディングすることをお勧めします。

var spanclickhandler = function () {
    ...

    do some stuff

    ...
}

$('.officeapprovalspan').click(spanclickhandler);
于 2012-04-23T21:30:53.703 に答える
1

あなたがしたいことは次のとおりです。

var spanclickhandler = function () {
        ...

        do some stuff

        ...
};

$(this).replaceWith('<span class="officeapprovalspan">wero<span>');
$('.officeapprovalspan').on('click', spanclickhandler);

またはそれ以上

$(document).on('click', '.officeapprovalspan' function () {
        ...

        do some stuff

        ...
});
// Because 'on' will attach event on DOM element even if they are not created yet, if you define a selector descendant inside. You can replace `document` by the nearest top parent of all your `.officeapprovalspan` and it will improve performance. `document` is not really optimal here
$(this).replaceWith('<span class="officeapprovalspan">wero<span>');
于 2012-04-23T21:33:22.250 に答える
0

あなたはこれを行うことができますか?

$(this).replaceWith('<span class="officeapprovalspan">wero<span>').click(spanclickhandler);
于 2012-04-23T21:35:40.557 に答える
0

spanclickhandler$('.officeapprovalspan')この場合、jQuery オブジェクトを返します。別の関数を作成するか、イベント ネームスケープを使用する必要があります。

于 2012-04-23T21:31:26.223 に答える