`
atian25
  • 浏览: 468792 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ExtJS 输入框/MessageBox.prompt 禁止粘贴

阅读更多

回答问题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 添加输入限制,只准输入数字和.-+

 

分享到:
评论
1 楼 linder0209 2010-12-10  
好文章,好方法,学习了

相关推荐

    ext4.js 打包 最新文件

    1Extjs打包 1.1Sencha Cmd下载 地址:https://www.sencha.com/products/extjs/cmd-download/ 注意:Extjs4.XX的只能用,Sencha Cmd 4.0.5 (Windows) 来打包,不然运行的时候会报错 需要JDK1.6 或 JDK1.7,测试用1.8...

    Practical.ExtJS.Projects.with.Gears part 1

    part 2 is at http://download.csdn.net/source/2063350

    Extjs Ext.MessageBox.confirm 确认对话框详解

    Ext.MessageBox.confirm&#40;&#41;详解 显示一个确认对话框,用来代替JavaScript标准的confirm&#40;&#41;方法,具有两个按钮“是”和“否”如果为其提供一个回调函数,则该函数将在单击按钮后被调用(包括右上角的...

    ExtJs入门实例.doc

    `Ext.MessageBox.prompt()`方法用于获取用户的输入,提供了输入框。它有四个参数:`title`,`msg`,回调函数,以及一个可选的`multiline`参数,决定输入框是否为多行。回调函数的两个参数`e`和`text`分别代表用户...

    ExtJS Ext.MessageBox.alert&#40;&#41;弹出对话框详解

    代码如下: Ext.onReady(function() { Ext.Msg.alert&#40;‘提示’, ‘逗号分隔参数列表’&#41;; //这种方式非常常见的 ...接下来认识一下Ext.MessageBox Ext.MessageBox是一个工具类,他继承自Obiect对象,用来生成各种

    ExtJs + api + 笔记 + 完整包

    ExtJs 是一个强大的JavaScript库,专门用于构建富客户端Web应用程序。它提供了丰富的用户界面组件,如数据绑定、网格、表单、菜单、树形结构等,使得开发人员能够创建功能丰富的交互式网页应用。本资源包含ExtJs的...

    ExtJS 布局介绍

    ExtJS之布局篇.mht 非常详细的学习文档

    ExtJS弹出密码输入框的js文件

    通过这个修改后的`Ext.MessageBox.prompt`,开发者可以更安全地在ExtJS应用程序中实现密码输入功能,而无需自己编写复杂的加密和验证逻辑。这种封装和复用代码的方式是软件开发中的最佳实践,可以提高代码的可维护性...

    ext-2.2.zip

    体验例子见:http://extjs.com/deploy/dev/examples/form/file-upload.html 2、GMapPanel GMap扩展 体验例子见:http://extjs.com/deploy/dev/examples/window/gmap.html 3、XmlTreeLoader XML转换成Tree ...

    EXTJS4.0视频教程配套代码

    技术狂人论坛EXTJS4.0视频教程配套代码 原网址http://www.uspcat.com/forum.php?mod=viewthread&tid=198&extra= 源网址只能下载前十个,后面的就不能下载了。

    Extjs3 多选下拉框LovCombo

    ExtJS 3是一款基于JavaScript的富客户端框架,用于构建功能丰富的、交互式的Web应用程序。在ExtJS 3中,多选下拉框(LovCombo)是一种复合组件,它结合了下拉列表和“爱好者选择”(LOV,Lookup Value)的功能,允许...

    Extjs-ext-3.1.1

    licensing@extjs.com http://extjs.com/license Open Source License Ext is licensed under the terms of the Open Source GPL 3.0 license. http://www.gnu.org/licenses/gpl.html There are several FLOSS ...

    ASP.NET EXTJS 员工管理实例源码、注释详细

    00 ExtJs.Doc 01 ExtJs.SourceCode 02 ExtJs.Librariy 00 Extjs.Doc里包含如下个文件: ExtJs.CreateDB.sql 数据库创建脚本,为了兼容低版本的朋友。 ExtJs.CreateDB.sql.bak 数据库bak文件。 ExtJs.Demo.bak 数据库...

    extjs4.*完美时间日期控件,可选时分秒

    网上找了一些,不是运行不了,就是代码繁多复杂。所以自己试着写了一个扩展的时间日期控件,可选时分秒,包含项目源代码,下载可直接运行·

    ExtJs3.3中文API.CHM_extjs3.3中文文档_

    ExtJS是一个广泛使用的JavaScript库,专门用于构建富客户端应用程序。版本3.3是该库的一个稳定版本,提供了许多功能和组件,使得Web开发者能够创建功能丰富的、交互性强的用户界面。这个“ExtJS3.3中文API.CHM”文档...

    ExtJS实用开发指南.pdf

    ExtJS实用开发指南.pdf

    Ext JS 4 Web Application Development Cookbook

    Ext JS 4 Web Application Development Cookbook by Andrew Duncan and ... download from Sencha's website http://www.sencha.com/products/extjs/. ... See a random page in this book. Books: See all 48 items

    ext日期时间控件 (支持Extjs 3.0以上版本.)

    支持Extjs 3.0以上版本. 用过Extjs的人都晓得,Ext自身的DateField只支持日期选择,而TimeField却实现的又很简单。真的是苦了一帮子英雄好汉啊!此控件由本人原创,扩展了DateField。在Extjs3.0.0、3.2.1、3.3.0版本...

    Ext_MessageBox

    根据给定的信息,我们可以深入探讨ExtJS中`Ext.MessageBox`组件的使用方法及特性。`Ext.MessageBox`是ExtJS框架中用于显示模态对话框的一个非常实用的功能组件,它可以用来展示提示信息、请求用户输入、确认操作等。...

    ExtJs20学习系列(1).doc

    在ExtJS 2.0中,我们有一个非常有用的组件叫做`Ext.MessageBox`,它提供了一种方便的方式来显示各种对话框,如警告、确认和提示信息。`Ext.MessageBox`的使用对于任何开发者来说都是提高用户体验的关键部分。 1. **...

Global site tag (gtag.js) - Google Analytics