我在ascx文件(Sharepoint WebPart)中有一些jQuery响应复选框的更改事件,根据复选框的状态操作另一个控件/元素的属性(选中或取消选中,这就是问题):
$(document).on("change", '[id$=ckbxEmp]', function () {
var ckd = this.checked;
var $input = $('[id$=txtbxSSNOrITIN]');
if(ckd) $input.data("oldValue", $input.val()); // Remember current value
$input.prop("maxlength", ckd? 4 : 12).css({
background: ckd? 'yellow' : "lightgreen",
width: ckd? 40 : 80
}).val(function(i, v){
// If checked, slice value to four chars:
return ckd && v.length>4 ? v.slice(0,4) : $input.data("oldValue");
});
});
上面的脚本可以从this fiddle运行,这是基于我得到的答案here
我需要添加的是自定义验证代码。如果处于Employee(SSN)模式(选中复选框),我想我只需要验证输入0..9子集中的四个字符;如果ITIN,(复选框未选中),我需要一个更复杂的验证。我该如何融入呢?我是否需要编写验证函数并从" val"功能?我应该这一行:
return ckd && v.length>4 ? v.slice(0,4) : $input.data("oldValue");
......改为:
return ckd && v.length>4 ? getSSN($input.data) : getITIN($input.data);
...然后编写如下函数:
function getSSN(var entry) {
// validate/verify, slice to 4 chars if necessary
}
function getITIN(var entry) {
// validate/verify, slice to 12 if necessary
}
......还是什么?
来想一想,我需要为文本框创建一个事件处理程序,这似乎是合乎逻辑的(事实上,非常明显),类似于(伪文本):
$(document).on("change", '[id$=txtbxSSNOrITIN]', function () {
var $input = $('[id$=txtbxSSNOrITIN]');
var ckbxChecked = "#ckbxEmp".checked;
if (ckbxChecked) {
// validate for SSN, passing $input
}
else {
// validate for ITIN, passing $input
}
});
但是"我如何从这里到达那里"问题是......