2015-11-24 2 views
0

У меня возникает эта странная проблема, когда я пытаюсь создать кнопки, назначая для них событие onclick. Функция 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") 
} 

ответ

2

Это потому, что вы выполнения функция test() вместо передачи ссылки на него.

Вы должны сделать это вместо того, чтобы:

enable.onclick = test 

ПОЧЕМУ:

интерпретатор JavaScript присваивает любое значение находится справа, в переменную слева. В вашем случае произошло то, что интерпретатор выполнил функцию test и назначил возвращаемое значение (которое для не определено) обработчику события onclick.

EDIT: Если вы хотите передать в dir в вашей test функции: вам нужно будет сделать функцию обертку, как это:

enable.onclick = function() { 
    test(dir); 
} 

Обратите внимание, что функция упаковщик не выполняется (не () сек). Функция test будет выполнена onclick.

+0

Это похоже на проблему! Но одна проблема. В готовом продукте я буду использовать disablePlugin (name) и enablePlugin (name), как использовать аргументы? – Ezcha

+0

@Minecheese, какую переменную вы намерены передать в эти функции? –

+0

Я планировал пройти мимо – Ezcha

0

@ Ответ 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(); 
} 
Смежные вопросы