我试图通过将函数绑定到keypress事件来对某些字段执行验证。
我制作了几个自定义验证对象并将它们放在数组验证中(完整代码未显示):
{"id": "DE-mname", "events":"keypress", "func": function(obj){
return validator.name($(obj).val()) || $(obj).isEmpty();
}
并使用以下方法和自定义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())将返回一个空字符串,而不是$。我想用当前按下的键检索值。 请注意,我无法切换到关键字事件
答案 0 :(得分:2)
您可以检查事件的几个不同属性,以查看按下了哪些键:
然后,您可以将该信息与当前值组合以确定新值。当您需要处理{kbd>删除, Backspace ,删除, Ctrl 等keypress
事件时,它会变得复杂 - C , Ctrl - V 等
通常,如果您切换到使用keyup
,您的任务将 更容易。我知道你说你做不到,但我只是把它放在那里。
另一点:没有jQuery .isEmpty()
方法,就像你的代码一样。
答案 1 :(得分:1)
尝试使用charCode
转换来获取按下的按钮
String.fromCharCode(e.which)
看看小提琴
您无法直接检查输入的值,因为此事件发生在之前字段值。
答案 2 :(得分:1)
keypress事件可能是用于验证此类型的不良选择,因为它发生在目标对象的更改事件之前(在本例中为文本框)。您可以捕获正在输入的关键字符,但由于文本框值尚未更改,因此您无法验证新值。也许keyup对你来说是更好的选择。你说哪个不能用,为什么?什么阻止你使用这个事件?
答案 3 :(得分:0)
使用HTML5 input
事件。请参阅this answer。