我的javascript从文件中读取文本,并根据下面的按钮创建动态创建按钮。我面临的问题是它无法在点击时调用该功能。我已经尝试删除参数来调用它,它可以工作,但我似乎无法让它与传递参数一起工作。有人可以帮我吗?
JS:
function toggleVisibility(type){
alert(type);
}
按钮创建:
var button='<button type="button" class="btn btn-block btn-inverse active" data-toggle="button tooltip" title="Click this to enable/disable viewing of '+this+'" onclick="toggleVisibility('+"'"+this+"'"+')">'+word+'</button>';
答案 0 :(得分:3)
首先,你不应该使用内联处理程序,而且使用jQuery创建它更容易:
var that = this;
var button = $("<button>");
button.addClass("btn btn-block btn-inverse active");
button.attr({
type: "button",
"data-toggle": "button tooltip",
title: "Click this to enable/disable viewing of " + that
});
button.text(word);
button.on("click", function () {
toggleVisibility(that);
});
(是的,我知道你可以链接所有的方法调用,我只是想这样做)
当您准备好将此按钮放在某处时,只需使用$container.append(button);
。
一切都取决于this
是什么,或者你想要/期望它是什么。如果您需要将传递给toggleVisibility
的参数作为刚刚点击的特定按钮(我猜是要切换其可见性),只需传递this
(忽略that
)。至于设置title
属性,我不确定你想要什么:)
如果您的HTML结构如下:
<div id="container">
<!-- Buttons go somewhere in here -->
</div>
并且您将按钮附加到该容器(或该容器中的某个位置),使用事件委派将单个click
处理程序绑定到容器会更有效:
$("#container").on("click", ".special-btn-identifier", function () {
toggleVisibility(this);
});
当然,你需要在按钮上添加一个“special-btn-identifier”类,这样这个事件处理程序才能工作(并删除每个按钮的各个click
处理程序,因为这样做覆盖他们)。此单个事件处理程序只需运行一次,最好在#container
准备就绪后立即运行...就像在$(document).ready(function () {});
中一样。
答案 1 :(得分:0)
替换以下行:
.. onclick="toggleVisibility('+"'"+this+"'"+')">'+word+'</button>';
这个:
.. onclick="toggleVisibility(this)">'+word+'</button>';
因为您不需要转义this
关键字,也不需要在创建按钮文字的上下文中包含不同的this
。
答案 2 :(得分:0)
在创建按钮时,在文档上注册onClick事件,而不是在html中注册。
$(document).on('click', 'button.btn-inverse', function() { toggleVisibility(this); return false;});
答案 3 :(得分:0)
不要创建内联HTML字符串,不要使用侵入式Javascript。
虽然我甚至不建议您使用vanilla jQuery创建它们,但您可以尝试使用:
var $button = $('<button></button>', {
'text' : word
'type' : 'button',
'class' : 'btn btn-block btn-inverse active',
'data-toggle' : 'button tooltip',
...
// any other attributes
});
// append the $button anywere
$( someContainer ).append($button);
$( someContainer ).on('click', '.btn', function(event){
// you can refer to the button with $(this) here
});