儘管「不可選擇」方法應該禁用文本選擇,但它在IE,至少IE8中不能正常工作。文本光標仍然存在,並允許輸入。Rally App SDK 2.0:Ext.Element方法「不可選擇」沒有這麼規範化
我應該假設它在IE9中也不起作用,因爲Microsoft等效的CSS屬性「-ms-user-select」最近纔在IE10中引入,而IE10並未「正式」發佈,並且也是目前不支持Windows 7.
我還應該問爲什麼webkit版本(「-webkit-user-select」)不包括在內。我知道webkit是khtml的一個分支,它似乎能夠在Chrome中按照預期工作,但我仍然質疑這種遺漏。
/**
* Disables text selection for this element (normalized across browsers)
* @return {Ext.Element} this
*/
unselectable : function(){
var me = this;
me.dom.unselectable = "on";
me.swallowEvent("selectstart", true);
me.applyStyles("-moz-user-select:-moz-none;-khtml-user-select:none;");
me.addCls(Ext.baseCSSPrefix + 'unselectable');
return me;
}
是否有一種簡單的方法來修改此代碼,以便在比IE10版本的IE版本中提供正確的功能?
編輯:我有點麻煩得到這個工作。我在onReady調用中插入了以下內容,但在應用程序之前。
(function() {
var Ext = window.Ext4 || window.Ext;
Ext.override(Ext.dom.Element, {
unselectable: function() {
var me = this;
me.dom.unselectable = "on";
me.swallowEvent("selectstart", true);
me.applyStyles([
'-moz-user-select: none;',
'-khtml-user-select: none;',
'-webkit-touch-callout: none;',
'-webkit-user-select: none;',
'-ms-user-select: none;',
'user-select: none'
].join());
me.addCls(Ext.baseCSSPrefix + 'unselectable');
return me;
},
selectable: function() {
var me = this;
me.dom.unselectable = "off";
// Prevent it from bubles up and enables it to be selectable
me.on('selectstart', function(e) {
e.stopPropagation();
return true;
});
me.applyStyles([
'-moz-user-select: text;',
'-khtml-user-select: text;',
'-webkit-touch-callout: text;',
'-webkit-user-select: text;',
'-ms-user-select: text;',
'user-select: text'
].join());
me.removeCls(Ext.baseCSSPrefix + 'unselectable');
return me;
},
});
})();
不過,我得到這個錯誤:
Uncaught TypeError: Cannot read property 'Element' of undefined
你可以看看編輯過的原始文章,並可能讓我瞭解我在代碼定義/位置方面做錯了什麼? – user1417835 2012-08-20 17:39:28
嘎!我給了你非常糟糕的建議: - /問題的一部分是在Ext 4.1中改變了很多。給我一點我將完全重做我的答案。 – 2012-08-20 18:23:23
好的,重複我的答案來處理App SDK的兩個版本,你會發現我的答案的'2.0p2'部分適合你。如果不是,請告訴我。 – 2012-08-20 18:45:48