Javascript 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) {

我遇到了一个奇怪的问题,我试图创建按钮,然后给它们分配一个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) {
    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