2012-02-09 12 views
2

私は、OnClick()メソッドをExt.form.Textコンポーネントに追加する方法を知りたいと思います。コンポーネントがテキストフィールドである場合OnClickメソッドをTextField(ExtJS Framework)に追加する方法はありますか?

handler: function() {alert("Hello!");} 

しかし、その行doesn't作品:コンポーネントがボタンの場合

は、その後、私がしなければならないすべては、この行を追加することです。以下の例を見てください:

Ext.create('Ext.form.Panel', { 
    title: 'Contact Info', 
    width: 300, 
    bodyPadding: 10, 
    renderTo: Ext.getBody(), 
    items: [{ 
     id: 'myButton', 
     xtype: 'textfield', 
     name: 'name', 
     fieldLabel: 'Name', 
     style: 'background-color: #ddd;', 
     allowBlank: false, 
     handler: function() {Ext.getCmp('myButton').setValue("TEXT")} // Does not work! 
    }, { 
     xtype: 'button', 
     name: 'email', 
     fieldLabel: 'Email Address', 
     style: 'background-color: green', 
     textfieldStyle: 'background-color: green', 
     handler: function() {Ext.getCmp('myButton').setValue("TEXT")} // Works! 

    }] 
}); 
+0

これは役立つかもしれない[http://stackoverflow.com/questions/ 7260134/extjs-4-event-handling-tutorial/7261836#7261836](http://stackoverflow.com/questions/7260134/extjs-4-event-handling-tutorial/7261836#7261836) –

答えて

9

ハンドラは、デフォルトのアクションリスナーのためのショートカットです。ボタンの場合、これは明らかにクリックですが、テキストフィールドにはデフォルトのアクションがありません。また、テキストフィールドには、実際にクリックイベントを発生しませんが、あなたは常にDOM要素にイベントハンドラを追加することができます。

Ext.create('Ext.form.Panel', { 
    title: 'Contact Info', 
    width: 300, 
    bodyPadding: 10, 
    renderTo: Ext.getBody(), 
    items: [{ 
     id: 'myButton', 
     xtype: 'textfield', 
     name: 'name', 
     fieldLabel: 'Name', 
     style: 'background-color: #ddd;', 
     allowBlank: false, 
     listeners: { 
      render: function() { 
       this.getEl().on('mousedown', function(e, t, eOpts) { 
        Ext.getCmp('myButton').setValue("TEXT") 
       }); 
      } 
     } 
    }] 
}); 
+0

ありがとう!リスナーをボタン宣言の外で宣言し、on()メソッドで呼び出すことは可能ですか? – Rox

+1

レンダリングされているかどうかを確認する必要があります(レンダリングされたテキストフィールドにのみリスナーを追加できます)。テキストフィールドを拡張することもできます。ここに例があります:http://jsfiddle.net/3ZZcZ/1/ – Krzysztof

+0

このイベントは、フィールドラベルをクリックしても発生します。実際のフィールドをクリックしたときにだけイベントが発生するようにするには、 'var inputElement = this.getEl()。down( 'input')'のようにinput要素を取得し、 'mousedown'イベントをバインドします。 'click'イベントを使わないように注意してください。フィールドラベルをクリックしても入力上で発生する可能性があるからです。 – MarthyM

2
Ext.create('Ext.form.Panel', { 
    title: 'Contact Info', 
    width: 300, 
    bodyPadding: 10, 
    renderTo: Ext.getBody(), 
    items: [{ 
     id: 'myButton', 
     xtype: 'textfield', 
     name: 'name', 
     fieldLabel: 'Name', 
     style: 'background-color: #ddd;', 
     allowBlank: false, 
     listeners: { 
      render: function(component) { 
       component.getEl().on('click', function(event, el) { 
        component.setValue("TEXT"); 
       }); 
      } 
     } 
    }, { 
     xtype: 'button', 
     name: 'email', 
     fieldLabel: 'Email Address', 
     style: 'background-color: green', 
     textfieldStyle: 'background-color: green', 
     handler: function() {Ext.getCmp('myButton').setValue("TEXT")} // Works! 

    }] 
}); 
関連する問題