Javascript Onclick在启动时激活,然后不执行任何操作
我遇到了一个奇怪的问题,我试图创建按钮,然后给它们分配一个onclick事件。onclick函数在页面加载后立即启动,然后单击它时不执行任何操作Javascript Onclick在启动时激活,然后不执行任何操作,javascript,node-webkit,Javascript,Node Webkit,我遇到了一个奇怪的问题,我试图创建按钮,然后给它们分配一个onclick事件。onclick函数在页面加载后立即启动,然后单击它时不执行任何操作 var walk = require('walk'); var files = []; //Scan var walker = walk.walk('./src/scripts/plugins', { followLinks: false }); walker.on('file', function(root, stat, next) {
var walk = require('walk');
var files = [];
//Scan
var walker = walk.walk('./src/scripts/plugins', { followLinks: false });
walker.on('file', function(root, stat, next) {
listPluginE(stat.name)
next();
});
var walker = walk.walk('./src/scripts/disabledplugins', { followLinks: false });
walker.on('file', function(root, stat, next) {
listPluginD(stat.name,"disabled")
next();
});
function listPluginE(dir) {
//Text
var dir = arguments[0]
var type = "enabled"
var para = document.createElement("p");
var t = document.createTextNode(dir);
para.className = type;
para.appendChild(t);
document.getElementById('enabledSpace').appendChild(para);
//Disable
var disable = document.createElement("button");
var t = document.createTextNode("Disable");
disable.className = "disable";
disable.onclick = test()
disable.appendChild(t);
document.getElementById('enabledSpace').appendChild(disable);
//Delete
var delButton = document.createElement("button");
var t = document.createTextNode("Delete");
delButton.className = "del";
delButton.appendChild(t);
document.getElementById('enabledSpace').appendChild(delButton);
}
function listPluginD(dir) {
//Text
var dir = arguments[0]
var type = "disabled"
var para = document.createElement("p");
var t = document.createTextNode(dir);
para.className = type;
para.appendChild(t);
document.getElementById('disabledSpace').appendChild(para);
//Enable
var enable = document.createElement("button");
var t = document.createTextNode("Enable");
enable.className = "enable";
enable.onclick = test()
enable.appendChild(t);
document.getElementById('disabledSpace').appendChild(enable);
//Delete
var delButton = document.createElement("button");
var t = document.createTextNode("Delete");
delButton.className = "del";
delButton.appendChild(t);
document.getElementById('disabledSpace').appendChild(delButton);
}
function enablePlugin(name) {
name = arguments[0]
fs.rename("./src/scripts/disabledplugins/" + name,"./src/scripts/plugins/" + name)
location.reload();
}
function disablePlugin(name) {
name = arguments[0]
fs.rename("./src/scripts/plugins/" + name,"./src/scripts/disabledplugins/" + name)
location.reload();
}
function test() {
console.log("test")
}
这是因为您正在执行
test()
函数,而不是向其传递引用
您需要这样做:
enable.onclick = test
原因:
JavaScript解释器将右边的值分配给左边的变量。在您的例子中,所发生的是解释器执行了test
函数,并将返回值(对于未定义)分配给onclick
事件处理程序
编辑:如果要将dir
传递到test
函数中,则需要制作如下函数包装器:
enable.onclick = function () {
test(dir);
}
请注意,包装器函数没有执行(没有
()
s)。test
函数将被执行onclick
@jsve的答案不太有效(给出了一个未定义的错误),但它确实给了我一个想法,这是可行的。我把脚本和我想在函数中执行的参数放在一起。这是我的最终代码
var walk = require('walk');
var files = [];
//Scan
var walker = walk.walk('./src/scripts/plugins', { followLinks: false });
walker.on('file', function(root, stat, next) {
listPluginE(stat.name)
next();
});
var walker = walk.walk('./src/scripts/disabledplugins', { followLinks: false });
walker.on('file', function(root, stat, next) {
listPluginD(stat.name,"disabled")
next();
});
function listPluginE(dir) {
//Text
var dir = arguments[0]
var type = "enabled"
var para = document.createElement("p");
var t = document.createTextNode(dir);
para.className = type;
para.appendChild(t);
document.getElementById('enabledSpace').appendChild(para);
//Disable
var disable = document.createElement("button");
var t = document.createTextNode("Disable");
disable.className = "disable";
disable.onclick = function() { disablePlugin(dir); }
disable.appendChild(t);
document.getElementById('enabledSpace').appendChild(disable);
//Delete
var delButton = document.createElement("button");
var t = document.createTextNode("Delete");
delButton.className = "del";
delButton.appendChild(t);
document.getElementById('enabledSpace').appendChild(delButton);
}
function listPluginD(dir) {
//Text
var dir = arguments[0]
var type = "disabled"
var para = document.createElement("p");
var t = document.createTextNode(dir);
para.className = type;
para.appendChild(t);
document.getElementById('disabledSpace').appendChild(para);
//Enable
var enable = document.createElement("button");
var t = document.createTextNode("Enable");
enable.className = "enable";
enable.onclick = function() { enablePlugin(dir); };
enable.appendChild(t);
document.getElementById('disabledSpace').appendChild(enable);
//Delete
var delButton = document.createElement("button");
var t = document.createTextNode("Delete");
delButton.className = "del";
delButton.appendChild(t);
document.getElementById('disabledSpace').appendChild(delButton);
}
function enablePlugin(name) {
name = arguments[0]
fs.rename("./src/scripts/disabledplugins/" + name,"./src/scripts/plugins/" + name)
location.reload();
}
function disablePlugin(name) {
name = arguments[0]
fs.rename("./src/scripts/plugins/" + name,"./src/scripts/disabledplugins/" + name)
location.reload();
}
这似乎解决了问题!但有一个问题。在成品中,我将使用disablePlugin(名称)和enablePlugin(名称)如何使用参数?@minecese,您打算将什么变量传递到这些函数中?我计划传递dir