代码之家  ›  专栏  ›  技术社区  ›  MGOwen

jquery:在动态添加一个dom元素时,尝试将一个函数挂接到onclick,但它会立即执行该函数。

  •  4
  • MGOwen  · 技术社区  · 17 年前

    我正在使用jquery动态地(我的意思是在运行时)向页面的dom中添加一个span元素:

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

    问题是最后一行:我认为它将添加createTaskRow(activityName)作为范围的onclick事件的处理程序,就像:

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

    这正是我想要的-但是当我在浏览器中运行它时,我可以看到在这一行使用的调试器 立即运行函数 相反。

    如果我能让它更清晰:createTaskRow()在我试图将其添加到onclick时运行(我希望它只在用户实际单击范围时运行)。

    知道我做错了什么吗?(如果我的问题不够清楚,请告诉我)

    4 回复  |  直到 17 年前
        1
  •  9
  •   molf    17 年前

    .click()

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

    click

        2
  •  2
  •   Russ Cam    17 年前

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

    Working Demo

    $(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);
    }
    
        3
  •  1
  •   RaYell    17 年前

    live()

    $("span.smallButton").live("click", function () {
        CreateTaskRow(ActivityName);
    });
    

    $(document.createElement("span"))
        .attr({ id: activityNameHyphened + "-NewButton", name: activityNameHyphened + "-NewButton" })
        .addClass("smallButton")
        .appendTo(cell1);
    
        4
  •  0
  •   Andreas Grech    17 年前

    $("p").bind("click", function(e) {
          var str = "( " + e.pageX + ", " + e.pageY + " )";
          $("span").text("Click happened! " + str);
    });
    
    推荐文章