代码之家  ›  专栏  ›  技术社区  ›  Rakesh Juyal

为什么我不能在div的onClick事件上绑定方法?

  •  1
  • Rakesh Juyal  · 技术社区  · 15 年前

    我试图动态创建div元素,在创建时使用onClick='showdimmension();'。它在警告框中显示了正确的html,但是当创建DIV时,您可以看到DIV没有附加任何onClick方法[firebug]。而不是它有一个杂散的字符串“showDimension();”。为什么会这样?如何解决?
    http://jsbin.com/inoqi3/3

    而且,你可以看到我正在使用

    var eventDe = " onClick='showDimension("+i +");'";
    

    4 回复  |  直到 15 年前
        1
  •  2
  •   Mic    15 年前

    你把引号弄乱了。有时你用 " 有时 ' .

    用Javascript和 " 对于HTML属性应该是这样的。如下所示:

      var style =  [' style="background-color: ' + getRandomColor(),
          'position:absolute;border: thick solid',
          'height: ' + height,
          'width: ' + width,
          'left: ' + left,
          'top: ' + top,
          '" '].join(';');
    
      var eventDe = 'onclick="showDimension(this);"';
      var innerText = 'DIV:' + i + '<br/> height: ' + height + '<br/>';      
      var html = '<div id="div' + i + '" ' + style + ' ' + eventDe + '>' + 
                 innerText + '</div>';      
    

    • 而不是 += Array join
    • onclick 因为属性不区分大小写
    • 这个 showDimension(this) ,这将为您提供已单击DIV的引用。

    function showDimension(div){      
      alert($(div).height());   
    }
    

    您可以考虑使用javascript模板引擎来避免所有这些字符串操作。我为 PURE

        2
  •  2
  •   Sarfraz    15 年前

    更新:

    $('#element_id').live('click', function(event){
       var trget = event.target;
    });
    

    jQuery具有 live() 方法可用于将单击事件应用于动态元素。

    例子:

    $('#element_id').live('click', function(){
      // your code...
    });
    
        3
  •  1
  •   kobe    15 年前

    为什么不试试div类名方法呢。 为div指定一个类名,这样就可以有一个单独的click处理程序

    ('.clasname').live(click,function())类似于…这样

        4
  •  -1
  •   Xion    15 年前

    live , bind click )但是属性 onclick 相反,请确保添加 javascript: 指示JS调用和 event event.target 以及函数中的其他数据:

    var eventDe = " onlick='javascript:showDimension(event, " + i + ");'";
    

    我还是推荐使用jQuery。请记住,即使在JS中生成HTML(例如响应AJAX请求),您仍然可以使用jQuery API完成这项工作,并在将事件添加到父节点之前将其附加到新创建的节点(通过类似于 after