22

Google Apps スクリプトを使用して、パラメーターを渡す js 関数の実行に問題があります。パラメータを追加すると、ボタンがクリックされたときではなく、ページが読み込まれたときに常にコードが実行されます。

HtmlServiceの例から直接、OKです-ボタンが押されると実行されます...

document.getElementById('button1').onclick = doSomething;

しかし、以下のように呼び出し (および関数) にパラメーターを追加すると、ページが読み込まれたときに (ボタンが押されたときではなく) 1 回だけ実行されます...

document.getElementById('button1').onclick = doSomething('with_this_parameter');

この動作についての洞察をいただければ幸いです...答えが明らかな場合は申し訳ありません!

4

4 に答える 4

45

あなたが言う時

document.getElementById('button1').onclick = doSomething('with_this_parameter');

これは、 doSomething('with_this_parameter')を呼び出してから、戻り値をに割り当てることを意味しますdocument.getElementById('button1').onclick。したがって、コードがその行に到達したときに呼び出されるのはそのためです。値がそのプロパティに割り当て可能かどうかは別の質問ですが、それが呼び出される理由です。

このように使用してください

document.getElementById('button1').onclick = function(){
    doSomething('with_this_parameter');
}

参照:このソリューションは、MarkLinusによって提供されました。

于 2013-01-20T14:20:52.530 に答える
12

このようにしてください:

document.getElementById('button1').onclick = function(){
    doSomething('with_this_parameter');
}
于 2013-01-20T14:21:01.640 に答える
1

私は通常、次のように clickHandlers を実行します。

 // create button here or get button...
 var button1 = document.getElementById('button1').setName('button1');
 var clickHandler = app.createServerClickHandler('doSomething');
 button.addClickHandler(clickHandler);

 function doSomething(e){
   var button1 = e.parameter.button1;
   <do something with var button>
 }

追加するパラメータはわかりませんが、.setId/getId または .setTag/getTag を介してボタン自体から渡されない場合は、コールバック要素を追加して渡す必要があります。テキストボックスからの場合:

 var textbox = app.createTextBox(); 
 var button1 =
 app.createButton.setName('button1'); 
 var clickHandler =        
 app.createServerClickHandler('doSomething').addCallbackElement(textBox);
 button1.addClickHandler(clickHandler);

お役に立てれば!

于 2013-01-21T14:37:05.500 に答える
1

関数の参照を変数に割り当てるには、次のようにします。

var a = doSomething;

doSomething は関数です。

ただし、パラメーターを渡してその関数を割り当てる必要がある場合

var a = doSomething(b);

これは、関数を変数に割り当てている間に呼び出され、意図されたときに呼び出されないため、問題を引き起こします。

これを克服するには、矢印関数または単純な関数を使用して、params で独自の関数を呼び出すことができます。

var c = () => doSomething(d);

これは、実際には var c = anonymous_function; として理解されます。

また

var c = function() {
    doSomething(d);
}

したがって、次のことができます。

document.getElementById('button1').onclick = () => doSomething('with_this_parameter');
于 2019-03-04T10:28:06.770 に答える