回答问题http://www.iteye.com/problems/21852
原题是:Ext.Msg.prompt(‘’)类型弹出的输入框,怎么可以限制它不能复制输入,只能手工输入
看了下Msg的源码,跟常规写法有点区别,
我们只能通过Ext.Msg.getDialog();得到它的窗体,里面的元素都没暴露出来
不过我们看:
dlg.getEl().addClass('x-window-dlg');
mask = dlg.mask;
bodyEl = dlg.body.createChild({
html:'<div class="ext-mb-icon"></div><div class="ext-mb-content"><span class="ext-mb-text"></span><br /><div class="ext-mb-fix-cursor"><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea></div></div>'
});
可以猜出(或者跟踪看源码prompt->show里面) prompt用的是
<input type="text" class="ext-mb-input" /> 或 <textarea class="ext-mb-textarea"></textarea>
于是我们可以如下代码:
Ext.Msg.prompt('::测试禁止::','试着粘贴');
var dlg = Ext.Msg.getDialog();
var t = Ext.get(Ext.get(dlg.body).select('.ext-mb-input,.ext-mb-textarea'));
t.on('paste',function(e){
//console.log('no paste')
e.stopEvent();
})
这个方法在firefox,ie,chrome下可行,不过据说在opera下没有paste事件,不过1%的..我就无视了...
实在要完美点,就自己监听keydown事件,排除Ctrl+V, shift+f10,右键等事件...还有浏览器菜单中的粘贴等,不过总有漏的时候...
对此问题,进行发散下:
1.对Msg进行扩展,添加几个方法,以便很方便的获取到里面的对象,这个应该不难.
2.让我们把禁止进行到底吧...
function testLimit(){
Ext.Msg.prompt('::气死不偿命::','试着选择/复制/粘贴/右键/输入非数字');
var dlg = Ext.Msg.getDialog();
var t = Ext.get(dlg.body).select('.ext-mb-input,.ext-mb-textarea');
//禁止粘贴
t.on('paste',function(e){
//console.log('no paste')
dlg.setWidth(500)
//e.stopEvent();
})
//禁止选择
//selectstart事件只对ie有效,所以用css来限制是最完美的, 其实就是一句 -moz-user-select: none;
t.addClassOnFocus('x-unselectable');
//t.on('selectstart',function(e){
//console.log('no select')
// e.stopEvent();
//})
//禁止复制
t.on('copy',function(e){
//console.log('no copy')
e.stopEvent();
})
//禁止右键
t.on('contextmenu',function(e){
//console.log('no contextmenu')
e.stopEvent();
})
//只准输入数字
t.on('keypress',function(e){
//console.log('only number')
//special keys don't generate charCodes, so leave them alone
if(e.ctrlKey || e.isSpecialKey()){
return;
}
var maskRe = new RegExp('[' + Ext.escapeRe("0123456789.-\\+") + ']');
if(!maskRe.test(String.fromCharCode(e.getCharCode()))){
e.stopEvent();
}
})
var p = new Ext.Panel({
width:300,
height:300,
renderTo:Ext.getBody(),
items:[]
})
}
09.08.14 添加输入限制,只准输入数字和.-+
本文介绍如何在ExtJS中限制Ext.Msg.prompt弹出的输入框的功能,包括禁止复制、选择、粘贴、右键及限制输入字符类型,并提供实现代码。
1143

被折叠的 条评论
为什么被折叠?



