0

我遇到了一个问题,即用户不断在我们的电子邮件字段中添加逗号;为了在此期间解决这个问题,我希望将逗号输入转换为句点。

现在,在有人说“逗号在电子邮件地址中有效”之前,我完全意识到这不是一个很好的解决方案......我提前道歉,但我仅限于一个电子邮件地址字段,我无法添加一秒钟用于验证目的,所以...

现在这工作正常,除了 iPad。'keyup' 事件似乎将输入中的插入符号位置移动到开头;如果我将其更改为“keydown”,它会按预期工作,但最后一次按键未转换

代码如下:

<label>email: </label>
<input id="tb_Email" length="30"></input>

和JS:

$(document).ready(function (event) {

          $(document).delegate("#tb_Email", "keyup", function (event) {
              if (event.which === 188) {
                  var cleanedValue = $(this).val().replace(",", ".");
                  $(this).val(cleanedValue);
              }
          });
      });

JSFiddle在这里:http: //jsfiddle.net/JXVcm/1/

有没有人有任何建议来修改此代码以按预期工作?

4

1 回答 1

1

试试这个

HTML:

<label>email:</label>
<input id="tb_Email" length="30"></input>

JS:

$(document).ready(function (event) {
    $(document).delegate("#tb_Email", "keyup", function (event) {
        if (event.which === 188) {
            var cleanedValue = $(this).val().replace(",", ".");
            $(this).val(cleanedValue);
            $(this).caretToEnd();
        }
    });

    //Set caret position easily in jQuery
    (function ($) {
        // Behind the scenes method deals with browser
        // idiosyncrasies and such
        $.caretTo = function (el, index) {
            if (el.createTextRange) {
                var range = el.createTextRange();
                range.move("character", index);
                range.select();
            } else if (el.selectionStart != null) {
                el.focus();
                el.setSelectionRange(index, index);
            }
        };

        // The following methods are queued under fx for more
        // flexibility when combining with $.fn.delay() and
        // jQuery effects.

        // Set caret to a particular index
        $.fn.caretTo = function (index, offset) {
            return this.queue(function (next) {
                if (isNaN(index)) {
                    var i = $(this).val().indexOf(index);

                    if (offset === true) {
                        i += index.length;
                    } else if (offset) {
                        i += offset;
                    }

                    $.caretTo(this, i);
                } else {
                    $.caretTo(this, index);
                }

                next();
            });
        };

        // Set caret to beginning of an element
        $.fn.caretToStart = function () {
            return this.caretTo(0);
        };

        // Set caret to the end of an element
        $.fn.caretToEnd = function () {
            return this.queue(function (next) {
                $.caretTo(this, $(this).val().length);
                next();
            });
        };
    }(jQuery));

我包含了位置的小插件代码。

于 2013-06-06T10:07:23.617 回答