Javascript 使用google闭包从复选框激活组合框
在对话框中,我有一组Id为user1、user2等的复选框,还有一组Id为usersel1、usersel2等的组合框。如果选中复选框(假设Id为user1),则必须激活相应的组合框(即Id为usersel1的组合框)。我有以下代码,但不工作。我如何实现这种行为Javascript 使用google闭包从复选框激活组合框,javascript,google-closure-compiler,google-closure,google-closure-library,Javascript,Google Closure Compiler,Google Closure,Google Closure Library,在对话框中,我有一组Id为user1、user2等的复选框,还有一组Id为usersel1、usersel2等的组合框。如果选中复选框(假设Id为user1),则必须激活相应的组合框(即Id为usersel1的组合框)。我有以下代码,但不工作。我如何实现这种行为 for(var g=0;g<userlist.length;g++) //userlist.length give no of users b2 = (goog.dom.getElement('usersel'+(g+1)
for(var g=0;g<userlist.length;g++) //userlist.length give no of users
b2 = (goog.dom.getElement('usersel'+(g+1))); //gets combo box
//listening if check box is clicked
goog.events.listen(goog.dom.getElement('user'+(g+1)),
goog.events.EventType.CLICK,
function(e) {
b2.disabled = (false); // trying to enable corresponding combo box
});
对于(var g=0;g有两个问题
首先,
循环的仅应用于第二行,而不是整个块
第二,创建闭包的方法是错误的(请参阅)。值b2没有像您所想的那样传播到事件处理程序中
如果像这样重写,它将起作用:
for (var g=0;g<userlist.length;g++) { //userlist.length give no of users
b2 = goog.dom.getElement('usersel'+(g+1)); //gets combo box
//listening if check box is clicked
goog.events.listen(goog.dom.getElement('user'+(g+1)),
goog.events.EventType.CLICK,
makeEventHandler(b2)
);
}
function makeEventHandler(element) {
return function(e) {
element.disabled = false;
}
}
用于(var g=0;g工作得非常好!!!!!当复选框未选中时,组合框需要禁用,因此我们是否应该添加另一个侦听器?另一个问题是,仅当脚本第一次加载时,侦听函数才起作用;第二次调用对话框时,没有重新加载侦听函数,侦听函数不起作用。第一个问题。您可以在同一个事件处理程序中处理此问题,无需添加其他侦听器。您只需检查复选框的状态,然后根据它启用或禁用select元素。第二个问题。当您运行此脚本时,它会将事件处理程序添加到所有现有元素中。如果以后添加更多元素,显然需要添加事件处理程序r这些也可以。第一个任务可以这样做:element.disabled=!e.currentTarget.checked;
第二个问题:当我单击按钮时,我会得到对话框。当我第一次这样做时,侦听器事件工作,从第二次单击按钮时开始(无需重新加载)如果您想在JSBin-example中托管代码,那么就不需要了