我一直对表单使用jQuery validate(),但在升级到我们的XMPie软件(我们进行有针对性的通信)后最近遇到了问题。
新版本的XMPie需要jQuery 1.10.2,这是validate()不支持的版本,所以我手动进行验证。
我可以通过为每个输入编写单独的函数来轻松验证,但这意味着重写至少一些代码以定位特定的输入名称或id。例如。
我想知道为什么我不能为特定输入类型(例如简单的文本字段)编写泛型函数,并让输入在focusout()上调用函数,将其自身传递为参数?
如果我有两个文字输入," fullName"和" userName"为什么我不能使用
$(document).ready(function () {
var inputName = "";
var inputValue = "";
var inputAlert = "";
$("input").focusout(function () {
inputIdentify(this);
console.log(inputName);
inputGetValue(this);
console.log(inputValue);
if (this.type == "text") {
console.log("YES");
textValidate(inputName, inputValue);
}
});
function inputIdentify(theInput) {
inputName = theInput["name"];
console.log(inputName);
return inputName;
}
function inputGetValue(theInput) {
inputValue = theInput["value"];
return inputValue;
}
function textValidate(theInput, inputValue) {
console.log(theInput,inputValue);
var letters = /^[A-Za-z ]+$/;
if (inputValue.match(letters)) {
$(theInput).addClass("correct");
return true;
} else {
$(theInput).removeClass("correct");
$(theInput).addClass("incorrect");
// alert('Username must have alphabet characters only');
$(inputName).focus();
return false;
}
}
});
删除并添加简单的CSS类(彩色边框)以指示问题字段?
谢谢和问候,
马尔科姆
答案 0 :(得分:1)
您没有将正确的参数传递给textValidate()
。您将inputName
作为theInput
传递,但textValidate()
使用$(theInput)
来访问输入元素。您应该将this
作为该参数传递:
textValidate(this, inputValue);
另外,您使用全局变量的设计很差。由于inputIdentify()
和inputGetValue()
返回值,您应该将返回的值赋给局部变量,而不是让这些函数设置全局变量。
$("input").focusout(function () {
var inputName = inputIdentify(this);
console.log(inputName);
var inputValue = inputGetValue(this);
console.log(inputValue);
if (this.type == "text") {
console.log("YES");
textValidate(this, inputValue);
}
});
function inputIdentify(theInput) {
var inputName = theInput["name"];
console.log(inputName);
return inputName;
}
function inputGetValue(theInput) {
var inputValue = theInput["value"];
return inputValue;
}