Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquerykeypress+。val()问题_Javascript_Jquery - Fatal编程技术网

Javascript jquerykeypress+。val()问题

Javascript jquerykeypress+。val()问题,javascript,jquery,Javascript,Jquery,我试图通过将函数绑定到keypress事件来对某些字段执行验证 我创建了几个自定义验证对象,并将它们放在数组中进行验证(未显示完整代码): 并使用以下方法和自定义jquery插件将其附加到某些组件: DataEntry.prototype.attachValidators = function(){ var x, validation; for(x in this.validations) { validation = th

我试图通过将函数绑定到keypress事件来对某些字段执行验证

我创建了几个自定义验证对象,并将它们放在数组中进行验证(未显示完整代码):

并使用以下方法和自定义jquery插件将其附加到某些组件:

DataEntry.prototype.attachValidators = function(){
        var x, validation;
        for(x in this.validations)
        {
            validation = this.validations[x];
            $("#" + validation.id).attachValidation(validation.events,validation.func); 
        }
};

/**
 *
 * @param {String} Events - a string of events you want validation to execute on
 * should be delimited by a space.
 * @param (Function) validateFunc - a function used to determine if the field is valid,
 * must return true, truthy, false or falsey values, the function may accept an object
 * as the first parameter which will be the selected jquery object.
 */
(function($){
    $.fn.extend({
        attachValidation: function(events, validateFunc){
            events += " validate";
            return this.each(function(){
                var that = this;
                $(this).bind(events, function(event){
                    if (validateFunc(that, event)) {
                        $(that).removeClass("error");
                    }
                    else {
                        $(that).addClass("error");
                    }
                    jq(this).trigger("errorAttached");
                });
            });
        }
    });
})(jQuery
我遇到的问题是,当触发按键事件且验证函数检查文本框组件的.val()时,新值不包含当前按下的键。


例如:如果我在输入字段中单击并按“$”键,$(obj).val()将返回一个空字符串,而不是$。我想用当前按下的键检索值请注意,我无法切换到按键事件

尝试使用
charCode
转换来获得按下的按钮

String.fromCharCode(e.which)
看看小提琴


无法直接检查输入值,因为此事件发生在字段值化之前。

尝试使用
charCode
转换来获得按下的按钮

String.fromCharCode(e.which)
看看小提琴


您无法直接检查输入的val,因为此事件发生在字段值化之前。

您可以检查事件的几个不同属性,以查看按下了哪些键:

然后,您可以将该信息与当前值组合以确定新值。当您需要处理诸如Delete、Backspace、Delete、Ctrl-C、Ctrl-V等
按键事件时,它会变得复杂

一般来说,如果您切换到使用
keyup
,您的任务将轻松得多。我知道你说过你不能,但我只是说说而已


还有一点:代码中没有jQuery
.isEmpty()
方法。

您可以检查事件的几个不同属性,查看按下了哪些键:

然后,您可以将该信息与当前值组合以确定新值。当您需要处理诸如Delete、Backspace、Delete、Ctrl-C、Ctrl-V等
按键事件时,它会变得复杂

一般来说,如果您切换到使用
keyup
,您的任务将轻松得多。我知道你说过你不能,但我只是说说而已



还有一点:没有jQuery
.isEmpty()
方法,就像在您的代码中一样。

按键事件可能是用于验证这种类型的错误选择,因为它发生在目标对象的更改事件(本例中的文本框)之前。您可以捕获输入的关键字符,但由于文本框值尚未更改,因此无法验证新值。也许keyup对您来说是一个更好的选择。你说你不能用,为什么?是什么阻止您使用此事件?

按键事件可能是用于验证此类型的错误选择,因为它发生在目标对象的更改事件(本例中的文本框)之前。您可以捕获输入的关键字符,但由于文本框值尚未更改,因此无法验证新值。也许keyup对您来说是一个更好的选择。你说你不能用,为什么?什么阻止您使用此事件?

使用HTML5
输入事件。请参阅。

使用HTML5
输入事件。请参阅。

对于jQuery,
e。应该使用哪个
。@VAShh我应该将其附加到值上并进行验证吗?是的,无论如何,为了更好地进行验证,您应该参考键up,如jQuery所说的检查更新的小提琴,以了解您正在检查的字符串是如何更改的。对于jQuery,
e.应该使用哪个
。@VAShh我应该把它附加到值上并验证吗?是的,无论如何,为了更好的验证,你应该像jQuery说的那样参考keyup,检查更新的fiddle,以了解你正在检查的字符串是如何变化的。我同意,但是当我使用keyup事件时,如果我对它进行制表,字段将进行验证,使其接收使字段变为红色的错误类。@kmb这就是您不使用
keyup
的原因?如果是这样的话,解决这个特定问题要比尝试使用
keypress
容易得多。所以你认为我应该使用keyup并检查tab键吗?@kmb,@Matt是正确的,编写“不验证键是否为“tab”要容易得多。我同意,但是当我使用keyup事件时,如果我使用tab键,字段将进行验证,使其接收使字段变为红色的错误类。@kmb这就是您不使用
keyup
的原因?如果是这样的话,解决这个特定问题要比尝试使用
keypress
容易得多。所以你认为我应该使用keyup并检查tab键吗?@kmb,@Matt是正确的,编写“不验证键是否为“tab”要容易得多。我同意,但是当我使用keyup事件时,如果我使用tab键,字段将进行验证,使其接收使字段变为红色的错误类。顺便说一句,isEmpty()是我自己的自定义插件。如果您只需使用
keyup
并解决选项卡问题,验证就会容易得多。另一个想法是:只需使用
.change()
事件。更改事件只会在模糊时触发,这使得验证在按键事件中的响应性降低,
shiftKey
ctrlKey
属性不相关,因为
which
属性已经对应于字符代码而不是键代码。我同意,但是,当我使用keyup事件时,如果我对该字段进行制表,则该字段将进行验证,从而使其接收到使该字段变为红色的错误类。顺便说一句,isEmpty()是我自己的自定义插件。如果您只需使用
keyup
并解决选项卡问题,验证就会容易得多。另一个想法:j