2012-07-11 54 views
0

问题1)单击某个按钮时是否可以使用类似的方法(请参见下面的代码)?Google Script中的事件如何从元素中获取数据

function Submit(e) { 
    var app = UiApp.getActiveApplication(); 
    var checked = app.getElementById("checkbox").getValue(); 
} 

问题2)单击标签时可以使用类似的东西(见下面的代码)?

function LabelClick(e) { 
    var LabelText = e.parameter.getText(); 
} 

对不起,这可能是愚蠢的,但我不能看到找到的这个任何像样的例子,似乎无法从谷歌的文档来解决这一问题,我只是习惯了谷歌的脚本了。如果你有答案,我会非常感激。

回答

2

你是不是很远......但没有足够接近得到它的工作...

UI元素的值是在被添加到处理器所谓callbackelement发送到处理函数。这个callbackelement可以是一个按钮,一个标签,或者更容易的是包含所有其他小部件的父小部件。这些“元素”在处理函数的“e”中,并且由它们的名称来标识。
另一方面,也就是说,如果您需要从另一个函数修改Ui元素,则可以通过其ID(getElementbyId())获取该元素,并为其分配一个值,就像在UI定义中一样功能。

我复制/粘贴来自另一篇文章的示例代码来说明我所说的,你可以看到e.parameter.chkmode,它包含了checkBox的值,我将添加一个Label来显示相反的过程(当文本改变时该按钮被点击)。

希望我是很清晰,

var sh = SpreadsheetApp.getActiveSheet(); 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
// 
function move() { 
    var app = UiApp.createApplication().setTitle("move test") 
     .setHeight(100).setWidth(400).setStyleAttribute("background-color","beige"); 
    var panel = app.createVerticalPanel(); 
    var next = app.createButton('next').setWidth('180'); 
    var chkmode = app.createCheckBox("moving mode (checked = up/dwn, unchecked=L/R)").setValue(false).setName('chkmode'); 
    var label = app.createLabel("test Label with text that will be modified on click").setId('label'); 
    panel.add(next).add(chkmode).add(label); 
    var handler = app.createServerHandler('click').addCallbackElement(panel); 
    next.addClickHandler(handler); 
    app.add(panel); 
    ss.show(app); 
} 
// 
function click(e) { 
    var app = UiApp.getActiveApplication(); 
    var activeline = sh.getActiveRange().getRow();// get the row number of the selected cell/range 
    var activecol = sh.getActiveRange().getColumn();// get the row number of the selected cell/range 
    var label = app.getElementById('label'); 
    label.setText('You have clicked the button'); 
    var chkmode=e.parameter.chkmode; 
    if(chkmode=="true"){ 
    activeline++ 
    }else{ 
     activecol++} 
    var sel=sh.getRange(activeline,activecol); 
    sh.setActiveSelection(sel);// make the next row active 
    return app; 
} 
+0

啊,我明白了,非常感谢,真的很感激。 :) – 2012-07-11 21:03:52

+0

我的荣幸:-) – 2012-07-11 21:05:18

相关问题