javascript
  • html
  • 2009-12-19 50 views 0 likes 
    0

    我不得不通过JavaScript来的HTML以下行注入到文档:的Javascript HTML注入

    <button type='button'>btnName </button> 
    

    除此之外,我到一个onclick注册到要调用的功能按钮期待一个ARG说'arg'这样的JavaScript看起来是这样的:

    var html = "<button type='button' onclick='+ fnName + 
        "(the param shld go here)'>" + btnName + "</button>" 
    

    如何实现这一目标? 一个明显的解决方案是将一个Id分配给该按钮,然后在将html附加到文档后稍后注册点击功能。但我不想这样做,因为按钮太多了。有没有其他的选择,你可以想到。

    此外: 函数名称是动态的,进去的参数也是动态的。如果需要,Id必须自动生成。

    **

    Ive得到了soltion,请参见下面

    **

    回答

    -3

    香港专业教育学院得到了解决: -

    var html = "<button type='button' onclick='"+ fnName +"("+ JSON.stringify(data) +")'>"+ btnName + "</button>" 
    
    +0

    这与您的问题没有显着不同,并且不包含有关实施的信息。你可以扩展为未来的搜索? – McArthey 2013-06-10 17:17:01

    3

    我会建议jQuery的。

    喜欢的东西

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script> 
    <script> 
    $(document).append(
        $("input") 
        .attr("type", "button") 
        .click(function(){ 
        doSomething() 
    )) 
    ); 
    </script> 
    
    +0

    这是最简单的方法来实现你想要的 - 为什么downvoted? – Chii 2009-12-19 06:24:33

    +0

    不是我想要的! – Ajay 2009-12-19 07:08:16

    +0

    除了语法错误,“类型属性不能改变” – 2009-12-19 09:11:29

    0

    既然你不想分配一个onclick方法通常的方式,关于倒过来将它们全部调用函数的唯一标识号。该函数将有一个具有参数的二维数组,这是假定每个按钮都使用不同的参数调用相同的函数。

    编辑:我可能误解了,这里是使用jQuery,我在最近的一个项目中使用的一些代码

    for(var place = 0; place < 5; place++) 
         { 
          if(document.getElementById('title_'+ place).addEventListener)//this is for compatablity 
           document.getElementById('title_'+ place).addEventListener('click', function(e){/*some code*/}); 
          else if(document.getElementById('title_'+ place).attachEvent) 
           document.getElementById('title_'+ place).attachEvent('onclick', function(e){/*some code*/}); 
          else 
           document.getElementById('title_'+ place) = function(e){/*some code*/}; 
         } 
    

    的代码添加onClick事件到5个物体,并且由于它会检查该方法在当前的浏览器工作的,它支持在主浏览器(据我已经测试)。

    我拿出了一些代码的可读性,但这只是将被调用的函数中的代码。

    +0

    我说我不想使用通常的onclick方式!告诉我该怎么做。 onclick =?什么shld来这里 – Ajay 2009-12-19 06:45:22

    0

    您可以使用document.write作为该变量。 var html = document.write(''+ btnName +'')。请更正单引号和双引号。我不知道这对你是否有用

    +1

    请请不要使用document.write当年> 1999 – 2009-12-19 06:41:33

    0

    如果你不想将一个事件绑定到每个单独的按钮,你可以绑定一个事件到所有这些按钮的父项(例如,举例来说,父按钮的父div ),然后使用事件冒泡来实现类似的效果。

    例如

    <div id="parent"> 
        <button id="b0">text</button> 
        <button id="b1">text</button> 
        <button id="b2">text</button> 
        <button id="b3">text</button> 
        <button id="b4">text</button> 
        <button id="b5">text</button> 
    </div> 
    <script> 
        $("#parent").click(function(e){ 
         if ($(e.target).attr("id") === "b0") { 
          // do b0's stuff 
         } else if ($(e.target).attr("id") === "b1") { 
          //do b1's stuff 
         } //etc 
        }); 
    </script> 
    

    另一种方式来做到这一点是使用jquery live events - 它们基本上是在做什么,我已经写了以上(更优雅的课程)。至于论据,你如何首先获得论证?不知道,我真的不能告诉你最好的前进方向。

    +0

    args:来自服务的数据的一部分 – Ajay 2009-12-19 06:36:39

    1

    您应该避免使用onclick作为HTML属性。相反,通过DOM接口以编程方式创建按钮并将该事件作为属性附加。

    var button  = document.createElement("button"); 
    button.type  = "button"; 
    button.innerHTML = btnName; 
    button.onclick = function() { 
        window[fnName](data); 
    }; 
    
    // Insert the button into whatever container node you are populating 
    someContainerNode.appendChild(button); 
    

    或者自认为jQuery的方式就是在乐队旅行车会:

    $("<button type='button'>" + btnName + "</button>").click(function() { 
        window[fnName](data); 
    }).appendTo(someContainerNode); 
    

    而且,由于你没有设置onclick处理程序作为一个字符串,你将不再需要你的函数的参数转换data转换为JSON字符串,这会提高性能。

    相关问题