4

私はjQueryを使用して動的に(つまり実行時に)スパン要素をページのDOMに追加しています:

// create add task button
$(document.createElement("span"))
    .attr({ id: activityNameHyphened + "-NewButton", name: activityNameHyphened + "-NewButton" })
    .addClass("smallButton")
    .appendTo(cell1)
    .click(CreateTaskRow(ActivityName));

問題は最後の行です。次のように、スパンのonclickイベントのハンドラーとしてCreateTaskRow(ActivityName)を追加すると思いました。

<span onclick="CreateTaskRow(ActivityName);"></span>

これは私が望んでいることですが、ブラウザーで実行すると、デバッガーを使用して、この行ですぐに関数が実行されることがわかります。

明確にできれば:CreateTaskRow()は、onclickに追加しようとしたときに実行されます(ユーザーが実際にスパンをクリックしたときにのみ実行されるようにします)。

私が間違っていることについて何か考えはありますか?(そして私の質問が十分に明確でない場合は私に知らせてください)

4

4 に答える 4

9

.click()実際に関数を呼び出して、結果をイベントハンドラーに渡します。代わりにクロージャ(無名関数)で試してみてください:

.click(function() {
    CreateTaskRow(ActivityName);
});

clickイベントが発生するまで、クロージャは実行されません。

于 2009-07-15T07:48:04.213 に答える
2

クロージャーで試してください

$("<span>")
    .attr({ id: activityNameHyphened + "-NewButton", name: activityNameHyphened + "-NewButton" })
    .addClass("smallButton")
    .appendTo(cell1)
    .click(function() { CreateTaskRow(ActivityName); });

ワーキングデモ

デモのコード -

$(function() {

  var activityNameHyphened = "id1";
  var ActivityName = "This is the highlighted activity";

  $('#clickMe').click(function() {

    $("<span>I've been added</span>")
        .attr({ id: activityNameHyphened + "-NewButton", 
              name: activityNameHyphened + "-NewButton" 
            })
        .addClass("smallButton")
        .appendTo("#here")
        .click(function() { CreateTaskRow(ActivityName); });        
  });    
});


function CreateTaskRow(e)
{
  alert(e);
}
于 2009-07-15T08:08:38.553 に答える
0

.clickはクリックイベントをトリガーします。関数をクリックイベントにバインドする必要があります。

$("p").bind("click", function(e) {
      var str = "( " + e.pageX + ", " + e.pageY + " )";
      $("span").text("Click happened! " + str);
});
于 2009-07-15T07:49:41.230 に答える