限制键盘代码在IE10和Chrome中歪曲?

时间:2013-08-27 23:37:31

标签: jquery google-chrome firefox internet-explorer-10

我在MVC视图上有一些输入字段,我想只允许输入字母Y或N.

当我使用Firefox(当前版本为23.0.1)对这些字段进行选项卡时,该字段的值会突出显示,我可以输入允许的字符,基本上会覆盖该值。例如,如果输入的值为N,则N会突出显示,然后我可以按Y,N将被Y替换.Hooray!

但是,当我使用Chrome或IE(10)时,字段会突出显示,但允许的键不会覆盖输入框中的值。字段取消突出显示,光标位于值的末尾。 Booo!

我错过了什么?

//Keydown and blur events for textboxes that only allow Y, or N
$(".onlyYN").keydown(function (e) {
    if (e.keyCode === 89 ||
        e.keyCode === 8 ||
        e.keyCode === 9 ||
        e.keyCode === 78 ||
        e.keyCode === 13 ||
        e.keyCode === 46 ||
        e.keyCode === 16) {
        clearError(this);
        setControlValueToUpperCase(this);
        return;
    }
    markControlAsWarning(this);
    alertify.log("The " + $(this).attr('id') + " field only accepts the single characters 'Y' or 'N'");
    e.preventDefault();
}).blur(function () {
    if ($(this).val().toUpperCase() !== "Y" && $(this).val().toUpperCase() !== "N") {
        markControlAsError(this);
        alertify.error("The " + $(this).attr('id') + " field only accepts the single characters 'Y' or 'N'");
        return;
    }
    clearError(this);
    setControlValueToUpperCase(this);
});

1 个答案:

答案 0 :(得分:0)

好吧,我似乎很快就使用了setControlValueToUpperCase()方法。所以首先将我的keydown更改为if语句

if (e.keyCode === 89 ||
        e.keyCode === 8 ||
        e.keyCode === 9 ||
        e.keyCode === 78 ||
        e.keyCode === 13 ||
        e.keyCode === 46 ||
        e.keyCode === 16) {
        clearError(this);
        return;
    }

解决了我的问题。

function setControlValueToUpperCase(ctrl) {
    /// <summary>
    ///     Set the contents of the control value to upper case
    /// </summary>
    /// <param name="ctrl">The control reference which contains value</param>
    $(ctrl).val($(ctrl).val().toUpperCase());
}

Horray Me !!