1

テキストボックス用のイベントハンドラー関数があります。これは次のことを行います。

  • ユーザーの連絡先を検索して、テキストボックスのパターンに一致する連絡先を表示します

さらに2つのテキストボックスに対して同じ機能を実行する必要があります。

テキストボックスの値は「e.parameter.textbox1NAME」を使用して取得されるため、イベントハンドラーとしてさらに2つの関数を追加しました。

textbox2.addKeyUpHandler('search2');
textbox3.addKeyUpHandler('search3');

に加えて

textbox1.addKeyUpHandler('search1');

3つの関数の唯一の違いは、使用されるパターンが「e.parameter.textbox1NAME」または「e.parameter.textbox2NAME」または「e.parameter.textbox3NAME」のいずれであるかです。

これは非効率的だと思いますが、どの要素がハンドラーを呼び出すか、またはどの要素がフォーカスされているかを知る方法はありますか?ありがとう

4

3 に答える 3

1

単一の関数を使用して、e.parameter.sourceから編集されたテキストボックスを特定できます。例えば

function onKeyUp(e){
  // Make sure the ID and the name of the widgets are the same.
  var src = e.parameter.source;
  var newValue = e.parameter[src]; 
  // Next steps
}

ほとんどの質問はかなり基本的なものなので、ここに質問をする前に、stackoverflow、課題追跡システム、古いGoogleAppsScriptフォーラムについて調査することをお勧めします。

于 2012-06-24T16:56:03.397 に答える
0

私がそれを正しく理解している場合、それは次のようなものです。1-n個のボックスがあり、特定のイベントのハンドラーをそれにバインドしたい。(jqueryを使用した)解決策は、domオブジェクト(ボックス)のセレクターを使用し、ハンドラーをアタッチすることです。たとえば、次のようにそれらすべてにクリックします。

$('.textboxes').click(function(e){
    console.log(e.currentTarge) // <-- Here current Target is your DOM Object.
})

また、この参照は関数copyにバインドされているため、オブジェクトのコンテキストで実行されます。例については、次のサイトを確認してください: jqueryクリックイベントまたは jqueryバインド関数

のんびり乾杯

于 2012-06-24T16:10:48.973 に答える
0

スリックの答えはとても賢いです!私はそれが好きで、それを試してみたかったです...これは説明するための例です!

function multitext_test() {
  var app = UiApp.createApplication().setHeight('150').setWidth('200');
  app.setTitle("test these textboxes");
  var panel = app.createFlowPanel();
  var txt1 = app.createTextBox().setName('txt1').setId('txt1');
  var txt2 = app.createTextBox().setName('txt2').setId('txt2');
  var txt3 = app.createTextBox().setName('txt3').setId('txt3');
  var label = app.createLabel('type in any of these textBoxes').setId('label')
  app.add(panel.add(txt1).add(txt2).add(txt3).add(label));
  var QHandler = app.createServerHandler("key").addCallbackElement(panel);
  txt1.addKeyUpHandler(QHandler);
  txt2.addKeyUpHandler(QHandler);
  txt3.addKeyUpHandler(QHandler);
//  
  var doc = SpreadsheetApp.getActive();
  doc.show(app);
}
//
function key(e){
  var app = UiApp.getActiveApplication();
  var src = e.parameter.source;
  var newValue = e.parameter[src]; 
  var act= app.getElementById(src)
  label = app.getElementById('label')
  label.setText("You typed '"+newValue+"' in textBox nr "+src.substring(3));
  act.setStyleAttribute('background','yellow');
  return app
}
于 2012-06-24T17:48:20.837 に答える