HexField.js
上传用户:snow1005
上传日期:2015-11-10
资源大小:3151k
文件大小:3k
源码类别:

Ajax

开发平台:

JavaScript

  1. /**
  2.  * @author t.murdock
  3.  *
  4.  * @class Ext.ux.form.HexField
  5.  * @extends Ext.form.TextField
  6.  * 
  7.  * Will only allow Hex values
  8.  */
  9. Ext.namespace("Ext.ux.form");
  10. Ext.ux.form.HexField = Ext.extend(Ext.form.TextField,  {
  11. initEvents : function(){
  12. Ext.ux.form.HexField.superclass.initEvents.call(this);
  13. var keyPress = function(e){
  14. var k = e.getKey();
  15. if(!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)){
  16. return;
  17. }
  18. // allowed text characters
  19. var allowed = '0123456789abcdefABCDEF';
  20. // get selected text length
  21. var selection = new Ext.ux.form.HexField.Selection( document.getElementById(this.id) );
  22. var s = selection.create();
  23. var selLength = s.end - s.start;
  24. // get text character keyed in
  25. var c = e.getCharCode();
  26. var c = String.fromCharCode(c);
  27. var value = c + this.getValue();
  28. if(allowed.indexOf(c) === -1 || (value.length > 6 && selLength === 0) ){
  29. e.stopEvent();
  30. }
  31. };
  32. this.el.on("keypress", keyPress, this);
  33. }
  34. , validateValue : function(value){
  35. if(!Ext.ux.form.HexField.superclass.validateValue.call(this, value)){
  36. return false;
  37. }
  38. if(!/^[0-9a-fA-F]{6}$/.test(value)){
  39. return false;
  40. }
  41. return true;
  42.     }
  43. });
  44. Ext.reg('hexfield', Ext.ux.form.HexField);
  45. Ext.ux.form.HexField.Selection = function(textareaElement) {
  46.     this.element = textareaElement;
  47. };
  48. Ext.ux.form.HexField.Selection.prototype.create = function() {
  49.     if (document.selection != null && this.element.selectionStart == null) {
  50.         return this._ieGetSelection();
  51.     } else {
  52.         return this._mozillaGetSelection();
  53.     }
  54. }
  55. Ext.ux.form.HexField.Selection.prototype._mozillaGetSelection = function() {
  56.     return { 
  57.         start: this.element.selectionStart, 
  58.         end: this.element.selectionEnd 
  59.     };
  60. }
  61. Ext.ux.form.HexField.Selection.prototype._ieGetSelection = function() {
  62.     this.element.focus();
  63.     var range = document.selection.createRange();
  64.     var bookmark = range.getBookmark();
  65.     var contents = this.element.value;
  66.     var originalContents = contents;
  67.     var marker = this._createSelectionMarker();
  68.     while(contents.indexOf(marker) != -1) {
  69.         marker = this._createSelectionMarker();
  70.     }
  71.     var parent = range.parentElement();
  72.     if (parent == null || parent.type != "text") {
  73.         return { start: 0, end: 0 };
  74.     }
  75.     range.text = marker + range.text + marker;
  76.     contents = this.element.value;
  77.     var result = {};
  78.     result.start = contents.indexOf(marker);
  79.     contents = contents.replace(marker, "");
  80.     result.end = contents.indexOf(marker);
  81.     this.element.value = originalContents;
  82.     range.moveToBookmark(bookmark);
  83.     range.select();
  84.     return result;
  85. }
  86. Ext.ux.form.HexField.Selection.prototype._createSelectionMarker = function() {
  87.     return "##SELECTION_MARKER_" + Math.random() + "##";
  88. }