ソースを参照

add extra text

Robin Herbots 12 年 前
コミット
4b37811e9f
1 ファイル変更84 行追加12 行削除
  1. 84 12
      qunit/tests.js

+ 84 - 12
qunit/tests.js

@@ -1,16 +1,64 @@
 $.fn.SendKey = function (keyCode) {
 $.fn.SendKey = function (keyCode) {
-    var keydown = $.Event("keydown"),
-		keypress = $.Event("keypress");
-    keyup = $.Event("keyup");
-
-    keydown.keyCode = keyCode;
-    $(this).trigger(keydown)
-    if (!keydown.isDefaultPrevented()) {
-        keypress.keyCode = keyCode;
-        $(this).trigger(keypress);
-        if (!keypress.isDefaultPrevented()) {
-            keyup.keyCode = keyCode;
-            $(this).trigger(keryup);
+    function caret(input, begin, end) {
+        var npt = input.jquery && input.length > 0 ? input[0] : input, range;
+        if (typeof begin == 'number') {
+            if (!$(input).is(':visible')) {
+                return;
+            }
+            end = (typeof end == 'number') ? end : begin;
+            if (npt.setSelectionRange) {
+                npt.selectionStart = begin;
+                npt.selectionEnd = end;
+
+            } else if (npt.createTextRange) {
+                range = npt.createTextRange();
+                range.collapse(true);
+                range.moveEnd('character', end);
+                range.moveStart('character', begin);
+                range.select();
+            }
+        } else {
+            if (!$(input).is(':visible')) {
+                return { "begin": 0, "end": 0 };
+            }
+            if (npt.setSelectionRange) {
+                begin = npt.selectionStart;
+                end = npt.selectionEnd;
+            } else if (document.selection && document.selection.createRange) {
+                range = document.selection.createRange();
+                begin = 0 - range.duplicate().moveStart('character', -100000);
+                end = begin + range.text.length;
+            }
+            return { "begin": begin, "end": end };
+        }
+    };
+
+    switch (keyCode) {
+        case 37: {
+            var pos = caret(this);
+            caret(this, pos.begin - 1);
+            break;
+        }
+        case 38: {
+            var pos = caret(this);
+            caret(this, pos.begin + 1);
+            break;
+        }
+        default: {
+            var keydown = $.Event("keydown"),
+                keypress = $.Event("keypress");
+            keyup = $.Event("keyup");
+
+            keydown.keyCode = keyCode;
+            $(this).trigger(keydown)
+            if (!keydown.isDefaultPrevented()) {
+                keypress.keyCode = keyCode;
+                $(this).trigger(keypress);
+                if (!keypress.isDefaultPrevented()) {
+                    keyup.keyCode = keyCode;
+                    $(this).trigger(keyup);
+                }
+            }
         }
         }
     }
     }
 }
 }
@@ -117,6 +165,30 @@ asyncTest("inputmask(\"9-AAA.999\", { onincomplete: ... })", 1, function () {
     $("#testmask").blur();
     $("#testmask").blur();
 });
 });
 
 
+test("inputmask(\"999.999.999\") - delete 2nd with backspace, continue the mask", function () {
+    $('body').append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("999.999.999");
+
+    $("#testmask")[0].focus();
+
+    var event;
+
+    $("#testmask").SendKey(49);
+    $("#testmask").SendKey(50);
+    $("#testmask").SendKey(51);
+    $("#testmask").SendKey(37);
+    $("#testmask").SendKey(37);
+    $("#testmask").SendKey(8);
+    $("#testmask").SendKey(52);
+    $("#testmask").SendKey(38);
+    $("#testmask").SendKey(53);
+    $("#testmask").SendKey(54);
+
+    equal($("#testmask").val(), "143.56_.___", "Result " + $("#testmask").val());
+
+    $("#testmask").remove();
+});
+
 
 
 module("Initial value setting");
 module("Initial value setting");