2014-09-23 39 views
0

我希望把这段我的文档:的onclick可变填充,而不会触发它

$('#myDiv).append("<div id='myDiv2' onclick="+extElementConfig.onClickDo+">Do</div>"); 

上面的代码片断有它onClick由某个对象填充性能, 这样:

var extElementConfig={onClickDo:sampleFunc()}; 

不幸的是,如预期的那样,在对象属性中声明一个函数也会触发它。

如何在不触发 sampleFunc()的情况下实现上述功能? 我只需要通过对象属性动态填充onClick事件。

+0

使用jQuery和使用内联事件?不要这样做! – epascarello 2014-09-23 17:25:33

+0

这是故意的。 – 2014-09-23 17:26:41

+0

为什么是故意的? – epascarello 2014-09-23 17:32:42

回答

2

假设你已经在extElementConfig对象控制,从sampleFunc

var extElementConfig={extElementPosition :10,extElementId:'mailOrderBtn',onClickDo:sampleFunc}; 
+0

打我几秒... :) – Etai 2014-09-23 17:24:18

+1

和什么如果我有功能的参数以及? – 2014-09-23 17:24:34

+0

我建议的方法取决于参数来自哪里,但最有可能的“绑定”对此很有效。 – 2014-09-23 17:26:43

0

由于罗布删除括号。 M.指出你的代码真正的问题是你在代码中运行代码而不是分配引用。当你试图分配onclick时,它也有问题,因为当你尝试使用函数引用时它是一个字符串。

为了让您的代码运行,它会像

function sampleFunc() { 
 
    alert("clicked"); 
 
} 
 

 
var extElementConfig={onClickDo:"sampleFunc()"}; 
 

 
$('#myDiv').append("<div id='myDiv2' onclick='"+extElementConfig.onClickDo+"()'>Do</div>");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="myDiv"></div>


为了摆脱这种,不使用刺方法建立起来的元素,而是充分利用jQuery的力量。下面是一个例子,我创建一个div并传入一些参数来改变元素的文本和css单击时。

function sampleFunc(txt, css) { 
 
     $(this).text(txt).css(css); 
 
    } 
 
    
 
    var extElementConfig = { 
 
     onClickDo: sampleFunc, 
 
     onClickArgs : ["Clicked", {"background-color":"green"}] 
 
    }; 
 
    
 
    $('<div/>', { 
 
      id: 'myDiv2', 
 
      text: 'Do!' 
 
     } 
 
    ).on("click", 
 
     function() { 
 
      extElementConfig.onClickDo.apply(this, extElementConfig.onClickArgs); 
 
     } 
 
    ).appendTo("#myDiv");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<div id="myDiv"></div>