|
|
|||||||
|
|
Thread Tools |
|
#1
|
||||
|
||||
|
FireFoxでは、<input type="text" readonly=”readonly” />の場合、入力はできませんが、カーソルが表示されます。
Ext.form.ComboBoxは、コンフィグオプション:editableで編集可否を設定できます。 そのとき、内部的にreadonlyが設定されているため、FireFoxでExt.form.ComboBoxを使い、編集不可にしてもカーソルが表示されてしまいます。 これを回避するために、フォーカスが当たった時点でblurするようオーバーライドしました。 FFCombo221.jsを読み込むことで、上記の現象を回避させることが可能です。 下記のソースは、Ext 2.2.1用です。 FFCombo221.js /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
// {{{ Ext.ux.override.FFCombo221
/**
* Ext.ux.override.FFCombo221
*
* コンボボックス編集不可能時にFireFoxでカーソルが表示される現象を回避
*
* @author Kazuhiro Kotsutsumi <kotsutsumi@xenophy.com>
*/
Ext.override( Ext.form.ComboBox, {
onRender : function( ct, position ) {
Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
if( this.hiddenName ) {
this.hiddenField = this.el.insertSibling({
tag:'input',
type:'hidden',
name: this.hiddenName,
id: (this.hiddenId||this.hiddenName)
},'before', true);
// prevent input submission
this.el.dom.removeAttribute('name');
}
if(Ext.isGecko){
this.el.dom.setAttribute('autocomplete', 'off');
}
if(!this.lazyInit){
this.initList();
}else{
this.on('focus', this.initList, this, {single: true});
}
if(!this.editable){
this.editable = true;
this.setEditable(false);
}
// FireFoxの場合で、かつ編集できないときにカーソル非表示対応
if( !this.editable && Ext.isGecko ) {
this.el.on(
'focus',
function(){
this.blur();
}
);
}
}
});
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* c-hanging-comment-ender-p: nil
* End:
*/
|
|
#2
|
||||
|
||||
|
ナイス!!kazuhiroさん
同機能を使っているので、FFで確認すると確かに現象が確認できました。で、kazuhiroさんのパッチを当てたら見事解決! IE中心で確認していたので、非常にありがたいレスです。(しかも、パッチ付うれピー) Extは、全体的にIEより、FFのが安定していると思い込みがあり、ちょっと反省している今日この頃です。 Ext3.0では大丈夫なのかなぁ… |
|
#3
|
||||
|
||||
|
Quote:
今日現在のExt3.0 PreAlphaなんで、正式リリースしたらもう一回チェックが必要ですが。 FFCombo300.js /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
// {{{ Ext.ux.override.FFCombo300
/**
* Ext.ux.override.FFCombo300
*
* コンボボックス編集不可能時にFireFoxでカーソルが表示される現象を回避
*
* @author Kazuhiro Kotsutsumi <kotsutsumi@xenophy.com>
*/
Ext.override( Ext.form.ComboBox, {
onRender : function( ct, position ) {
Ext.form.Checkbox.superclass.onRender.call(this, ct, position);
if(this.inputValue !== undefined){
this.el.dom.value = this.inputValue;
}
this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
if(this.boxLabel){
this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
}
if(this.checked){
this.setValue(true);
}else{
this.checked = this.el.dom.checked;
}
// FireFoxの場合で、かつ編集できないときにカーソル非表示対応
if( !this.editable && Ext.isGecko ) {
this.el.on(
'focus',
function(){
this.blur();
}
);
}
}
});
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* c-hanging-comment-ender-p: nil
* End:
*/
|
|
#4
|
||||
|
||||
|
FFCombo221.js のほうをいただきましたです。
|
|
#5
|
||||
|
||||
|
RC1でたんで、対応しました。
オーバーライドする場所が変わっています。 ちなみに、下記のコードで、2.2.1および3.0RC1両方対応できます。 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
// {{{ Ext.ux.override.FFCombo
/**
* Ext.ux.override.FFCombo
*
* コンボボックス編集不可能時にFireFoxでカーソルが表示される現象を回避
*
* @author Kazuhiro Kotsutsumi <kotsutsumi@xenophy.com>
*/
if( Ext.version === '2.2.1' ) {
// Ext JS 2.2.1
Ext.override( Ext.form.ComboBox, {
onRender : function( ct, position ) {
Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
if( this.hiddenName ) {
this.hiddenField = this.el.insertSibling({
tag:'input',
type:'hidden',
name: this.hiddenName,
id: (this.hiddenId||this.hiddenName)
},'before', true);
// prevent input submission
this.el.dom.removeAttribute('name');
}
if(Ext.isGecko){
this.el.dom.setAttribute('autocomplete', 'off');
}
if(!this.lazyInit){
this.initList();
}else{
this.on('focus', this.initList, this, {single: true});
}
if(!this.editable){
this.editable = true;
this.setEditable(false);
}
// FireFoxの場合で、かつ編集できないときにカーソル非表示対応
if( !this.editable && Ext.isGecko ) {
this.el.on(
'focus',
function(){
this.blur();
}
);
}
}
});
} else if( Ext.version === '3.0' ) {
// Ext JS 3.0
Ext.override( Ext.form.ComboBox, {
initEvents : function(){
Ext.form.Checkbox.superclass.initEvents.call(this);
this.mon(this.el, 'click', this.onClick, this);
this.mon(this.el, 'change', this.onClick, this);
// FireFoxの場合で、かつ編集できないときにカーソル非表示対応
if( !this.editable && Ext.isGecko ) {
this.mon(this.el, 'focus', function(){
this.blur();
}, this );
}
}
});
}
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* c-hanging-comment-ender-p: nil
* End:
*/
|
|
#6
|
||||
|
||||
|
Ext JS 3.0用と2.2.1両対応。
地味に、RC1でExt.form.ComboBoxのinitEventsが書き換わってたので修正しました。 コチラを使ってください。 じゃないと、ComboBoxをクリックしたときに、「fn is undefined」といエラーがでちゃいます。 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
// {{{ Ext.ux.override.FFCombo
/**
* Ext.ux.override.FFCombo
*
* コンボボックス編集不可能時にFireFoxでカーソルが表示される現象を回避
*
* @author Kazuhiro Kotsutsumi <kotsutsumi@xenophy.com>
*/
if( Ext.version === '2.2.1' ) {
// Ext JS 2.2.1
Ext.override( Ext.form.ComboBox, {
onRender : function( ct, position ) {
Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
if( this.hiddenName ) {
this.hiddenField = this.el.insertSibling({
tag:'input',
type:'hidden',
name: this.hiddenName,
id: (this.hiddenId||this.hiddenName)
},'before', true);
// prevent input submission
this.el.dom.removeAttribute('name');
}
if(Ext.isGecko){
this.el.dom.setAttribute('autocomplete', 'off');
}
if(!this.lazyInit){
this.initList();
}else{
this.on('focus', this.initList, this, {single: true});
}
if(!this.editable){
this.editable = true;
this.setEditable(false);
}
// FireFoxの場合で、かつ編集できないときにカーソル非表示対応
if( !this.editable && Ext.isGecko ) {
this.el.on(
'focus',
function(){
this.blur();
}
);
}
}
});
} else if( Ext.version === '3.0' ) {
// Ext JS 3.0
Ext.override( Ext.form.ComboBox, {
initEvents : function(){
Ext.form.ComboBox.superclass.initEvents.call(this);
this.keyNav = new Ext.KeyNav(this.el, {
"up" : function(e){
this.inKeyMode = true;
this.selectPrev();
},
"down" : function(e){
if(!this.isExpanded()){
this.onTriggerClick();
}else{
this.inKeyMode = true;
this.selectNext();
}
},
"enter" : function(e){
this.onViewClick();
this.delayedCheck = true;
this.unsetDelayCheck.defer(10, this);
},
"esc" : function(e){
this.collapse();
},
"tab" : function(e){
this.onViewClick(false);
return true;
},
scope : this,
doRelay : function(foo, bar, hname){
if(hname == 'down' || this.scope.isExpanded()){
return Ext.KeyNav.prototype.doRelay.apply(this, arguments);
}
return true;
},
forceKeyDown : true
});
this.queryDelay = Math.max(this.queryDelay || 10,
this.mode == 'local' ? 10 : 250);
this.dqTask = new Ext.util.DelayedTask(this.initQuery, this);
if(this.typeAhead){
this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this);
}
if(this.editable !== false){
this.mon(this.el, 'keyup', this.onKeyUp, this);
}
if(this.forceSelection){
this.on('blur', this.doForce, this);
}
// FireFoxの場合で、かつ編集できないときにカーソル非表示対応
if( !this.editable && Ext.isGecko ) {
this.mon(this.el, 'focus', function(){
this.blur()
}, this );
}
}
});
}
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* c-hanging-comment-ender-p: nil
* End:
*/
|
| Thread Tools | |
|
|