我有这样一个锚:
windowcontent = addField("<a href='#info' id='myid' onclick='createList(" + parts + ")'>Info</a>");
其中parts是一个复杂的对象。因为像这样它总是让我错误,我读到我应该使用createElement
。
所以我确实喜欢这个:
var o = document.createElement('a');
o.setAttribute('href', 'info');
o.onclick = createList(parts);
var t = document.createTextNode('Informazioni aggiuntive');
o.appendChild(t);
windowcontent = addField(o.outerHTML);
但在o.outerHTML
中这样我就不喜欢onclick=".."
所以当我点击我的链接时没有任何反应。
我该怎么做?
答案 0 :(得分:1)
如果你不介意jQuery(并且OP说他们不这样做),你可以这样做:
// Create an anchor element, using an optional set of properties
var $anchor = $("<a>", { href: '#info', 'class':'myclass', 'data-parts': parts, text: 'Info'});
// When added to the DOM results in <a href="#info" class="myclass" data-parts="test,anothertest">Info</a>
$(document).append($anchor);
// create a delegated click handler for the anchors
$(document).on('click', '.myclass', function(){
// get the parts stored in the data- attribute
var parts = $(this).data('parts');
// create the parts
createList(parts);
});
https://jsfiddle.net/TrueBlueAussie/1ca3c4cp/
document
作为默认值。委托事件在事件时应用选择器,因此处理注册事件时不存在的元素。答案 1 :(得分:0)
o.onclick = createList(parts);
调用createList
。尝试使用Function.prototype.bind()
引用createList
而不是调用createList
,将this
设置为o
,设置传递给parts
的参数
o.onclick = createList.bind(o, parts);