【发布时间】:2016-07-29 02:42:18
【问题描述】:
我正在通过 JavaScript 创建一个按钮,并尝试将其分配给一个 onclick 事件。在运行时创建了按钮,但是当我单击它时,onclick 事件没有触发。同样在 Chrome 的 Inspector 中,单击按钮时不会产生错误。
这是我的代码:
function truncator(){
$.each($('td.rawdata-field').not(':empty'), function(i,v){
var count = parseInt($(v).text().length);
var maxChars = 650;
if(count > maxChars){
var str = $(v).text();
var trimmed = str.substr(0, maxChars - 2);
$(v).text(trimmed + '...');
var btn = document.createElement('button');
btn.setAttribute('content', 'test content');
btn.setAttribute('class', 'show-full-text-button');
btn.innerHTML = 'Show Full Log';
btn.onclick = function() {
alert("assd");
};
$(v).append(btn);
}
});
};
v 是父容器,在本例中是 td 元素。
这里有什么问题?
编辑: 我可以提供的另一个细节是,上面的内容在一个页面上被执行了很多次,这与它为什么不起作用有关。所有按钮都创建得很好,但是通过上述方法完成时警报不起作用。
上述代码执行时容器已经存在。
编辑 2:
我已经更新了上面的代码以包含更多正在发生的事情。函数truncator 基本上应该遍历所有td 类不为空的rawdata-field 元素,并检查其中提到的文本是否超过650 个字符。如果是,它会将文本截断为 650 个字符,然后在用户希望的情况下在此处放置一个按钮以显示完整的日志。
调用truncator时,上述函数操作的表已经存在。
【问题讨论】:
-
您是在寻找 jquery 解决方案还是纯 js,因为如果您不需要,我们需要删除 jquery 标签
-
两者都可以,以更简洁者为准。
-
好吧,如果你想要一个 jquery 解决方案,你可以有这样的东西
$(document).on('click','.show-full-text-button',function(){alert('hello')}) -
当I test it 带有一些虚拟 HTML 时,您的代码在我这边运行良好。你确定这个脚本在
v初始化后运行吗?也许你可以把它移到你的<body>的底部来确定? -
@guardio ...您的解决方案有效,但由于我页面上的许多按钮都在使用
.show-full-text-button类,因此它会创建许多相同的弹出窗口。如果你能以某种方式使用变量名btn来引用按钮,我认为它会解决这个问题。
标签: javascript jquery html