Javascript jquerykeypress+。val()问题
我试图通过将函数绑定到keypress事件来对某些字段执行验证 我创建了几个自定义验证对象,并将它们放在数组中进行验证(未显示完整代码): 并使用以下方法和自定义jquery插件将其附加到某些组件:Javascript jquerykeypress+。val()问题,javascript,jquery,Javascript,Jquery,我试图通过将函数绑定到keypress事件来对某些字段执行验证 我创建了几个自定义验证对象,并将它们放在数组中进行验证(未显示完整代码): 并使用以下方法和自定义jquery插件将其附加到某些组件: DataEntry.prototype.attachValidators = function(){ var x, validation; for(x in this.validations) { validation = th
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,因为此事件发生在字段值化之前。您可以检查事件的几个不同属性,以查看按下了哪些键:
按键事件时,它会变得复杂
一般来说,如果您切换到使用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