2013-01-06 53 views
1

我想使用客戶端處理程序來驗證條目,以確保條目確實是一個數字。所以,如果一個條目包含一個字母,那麼我想禁用一個按鈕,以便用戶不能繼續。我使用GUI構建器構建了一個GUI,但是如果從GUI調用,客戶端處理程序(特別是validateNotNumber)不起作用。Apps腳本GUI和createClientHandler

到目前爲止,我試圖讓驗證器工作,我已經在GUI生成器中使用ID(Base)= Name(輸入字段),對於Events部分我有「on Key按「填寫具有客戶端處理程序的函數的名稱和文本框所在表單的名稱(在我的情況下爲AbsolutePanel1)。

調用的函數是:具有當一個鍵被按下在文本框中顯示的消息

function isitnotnumbers(e) { 
var app = UiApp.getActiveApplication(); 
app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer')) 
.forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false); 
return app; 
}; 

的功能的確叫我測試。但是,當按下非數字鍵時,指定的按鈕不會被禁用,因爲它應該是。

我發現的例子列出了手動編碼UI小部件中的驗證器,所以我不確定使用GUI構建器時出錯的位置。

那麼,我出了什麼問題,我該如何解決這個問題? 如果GUI構建器對客戶端處理程序(如使用HTML服務)有限制,是否有解決方法?

我其他的企圖(S):

我試圖點擊處理程序添加到文本框,這是上面的代碼修改:

var app = UiApp.getActiveApplication(); 
var handlernumbers = app.createClientHandler() 
    .forTargets(app.getElementById('LabelUserMessage')) 
    .setText('THe message'); 
var odobox = app.getElementById('ThisOdometer'); 
odobox.addClickHandler(handlernumbers); 
return app; 

回答

0

要回答我的問題,我會說,沒關係作爲谷歌將棄用GUI Builder和九月之後將停止運行。

我應該或者應該開始學習uiservice或htmlservice。

1

試試這個:

function isitnotnumbers(e) { 
var app = UiApp.getActiveApplication(); 
app.getElementById('ThisOdometer').addKeyUpHandler(app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer')) 
.forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false)); 
return app; 
}; 

編輯: 您不需要在單獨的函數中使用此代碼,只需將以下行添加到您的doGet()或主函數中(以便該應用程序僅在創建應用程序時創建一次aunches):

app.getElementById('ThisOdometer').addKeyUpHandler(app.createClientHandler().validateNotNumber(app.getElementById('ThisOdometer')) 
    .forTargets(app.getElementById('ButtonCalcMPG')).setEnabled(false)); 
+0

謝謝!這工作完美。我希望GUI生成器能夠成爲主要的新聞處理程序,因爲這對我來說似乎很直觀,這是一個新手。在這個想法中,我是不正確的,在GUI生成器中有一個按鍵事件指向與客戶端處理函數的函數應該是它應該工作的方式? – thegeorge

+0

無論從GUI構建器還是通過代碼手動創建,客戶端/服務器處理程序的工作方式都沒有區別。客戶端處理程序不會指向某個函數(而是像我們的情況那樣在創建時定義它們的操作),但它們需要鏈接到UI中的元素和觸發器事件。 – jad