我正在使用验证引擎进行一些测试,我发现消息呈现错误(在页面的角落),所以......当您动态更改类属性时,是否可以正确呈现消息jQuery的?喜欢重新验证表格? (输入的类属性已更改)
更新:我尝试使用'validate'
操作,但这是一回事。我在这里使用3个表,每个表有4个复选框。因此,在下拉列表更改时,我切换表格(选择一个选项时,会显示一个表格(从输入中删除disabled
和display:none
),另外两个表格(将disabled
添加到输入中)将display:none
放到表中。复选框名称使用Thymeleaf预处理表达式进行渲染,所以我想也许就是这样。我创建了一个使用alt属性而不是名称的minCheckbox的替代版本,但无济于事。好吧,但是错误仍然存在。制作表格的行为和消失是问题,但我不知道如何修复它。
更新#2:好的,我首先点击了保存按钮的点击事件:
$('input[name="input_save"]').click(function() {
if(flag == false){
$("#frmUsuarioCrear").validationEngine();
flag = true;
}
if(flag2 == true)
{
$("#frmUsuarioCrear").validationEngine('attach');
flag2 = false;
}
});
$("#frmUsuarioCrear").bind("jqv.form.result", function(event, errorFound) {
if(errorFound)
alert("Hay algunos problemas con sus datos. Revise y vuelva a intentar.");
});
我还为表单添加了绑定。该标志仅用于在分离时重新激活引擎。因此,在下拉列表的更改事件中:
$('#ddlModulo').change(function(){
var val = this.value;
if(val == "ADQUIRIENTE")
{
$('#modulo_1').find("input").removeAttr("disabled");
$('#modulo_2').find("input").attr("disabled", "disabled");
$('#modulo_3').find("input").attr("disabled", "disabled");
$('#modulo_1').removeAttr("style");
$('#modulo_2').css("display", "none");
$('#modulo_3').css("display", "none");
$("#main tr:nth-child(6)").hide();
$("#main tr:nth-child(6)").find("select").attr("disabled", "disabled");
$("#main tr:nth-child(7)").hide();
$("#main tr:nth-child(7)").find("select").attr("disabled", "disabled");
$('#modulo_1').find("input:first").attr("class", "validate[funcCall[checkHooks]]");
$('#modulo_2').find("input:first").removeAttr("class");
$('#modulo_3').find("input:first").removeAttr("class");
}
else if(val == "COMERCIO")
{
$('#modulo_1').find("input").attr("disabled", "disabled");
$('#modulo_2').find("input").removeAttr("disabled");
$('#modulo_3').find("input").attr("disabled", "disabled");
$('#modulo_1').css("display", "none");
$('#modulo_2').removeAttr("style");
$('#modulo_3').css("display", "none");
$("#main tr:nth-child(6)").show();
$("#main tr:nth-child(6)").find("select").removeAttr("disabled");
$("#main tr:nth-child(7)").hide();
$("#main tr:nth-child(7)").find("select").attr("disabled", "disabled");
$('#modulo_1').find("input:first").removeAttr("class");
$('#modulo_2').find("input:first").attr("class", "validate[funcCall[checkHooks]]");
$('#modulo_3').find("input:first").removeAttr("class");
}
else if(val == "EMISOR")
{
$('#modulo_1').find("input").attr("disabled", "disabled");
$('#modulo_2').find("input").attr("disabled", "disabled");
$('#modulo_3').find("input").removeAttr("disabled");
$('#modulo_1').css("display", "none");
$('#modulo_2').css("display", "none");
$('#modulo_3').removeAttr("style");
$("#main tr:nth-child(6)").hide();
$("#main tr:nth-child(6)").find("select").attr("disabled", "disabled");
$("#main tr:nth-child(7)").show();
$("#main tr:nth-child(7)").find("select").removeAttr("disabled");
$('#modulo_1').find("input:first").removeAttr("class");
$('#modulo_2').find("input:first").removeAttr("class");
$('#modulo_3').find("input:first").attr("class", "validate[funcCall[checkHooks]]");
}
else
{
$('#modulo_1').find("input").attr("disabled", "disabled");
$('#modulo_2').find("input").attr("disabled", "disabled");
$('#modulo_3').find("input").attr("disabled", "disabled");
$('#modulo_1').css("display", "none");
$('#modulo_2').css("display", "none");
$('#modulo_3').css("display", "none");
$("#main tr:nth-child(6)").hide();
$("#main tr:nth-child(6)").find("select").attr("disabled", "disabled");
$("#main tr:nth-child(7)").hide();
$("#main tr:nth-child(7)").find("select").attr("disabled", "disabled");
$('#modulo_1').find("input:first").removeAttr("class");
$('#modulo_2').find("input:first").removeAttr("class");
$('#modulo_3').find("input:first").removeAttr("class");
}
if(flag == true){
$("#frmUsuarioCrear").validationEngine('detach');
flag2 = true;
}
});
我这样做但是提示没有呈现它应该的位置。顺便说一句,在选择下拉列表的选项时,我在右表的每个第一个输入上添加了验证类。这可确保提示仅显示在第一个复选框中。 (我正在使用一个函数,因为所选选项的更改事件从其对应的表中获取所有复选框,并查看是否有一些已选中,如果没有则返回警报。换句话说,验证引擎的funcCall。
function checkHooks(field, rules, i, options)
{
var val = $('#ddlModulo').val();
if(val == "ADQUIRIENTE")
{
var inputs = $('#modulo_1').find("input[type='checkbox']:checked");
if(inputs.length == 0){
return options.allrules.checkHooks.alertText;
}
}
else if(val == "COMERCIO")
{
var inputs = $('#modulo_2').find("input[type='checkbox']:checked");
if(inputs.length == 0){
return options.allrules.checkHooks.alertText;
}
}
else if(val == "EMISOR")
{
var inputs = $('#modulo_3').find("input[type='checkbox']:checked");
if(inputs.length == 0){
return options.allrules.checkHooks.alertText;
}
}
更新#3:我稍微修改了这段代码。我在提交点击事件中添加了第二个条件,它检查第二个标志。如果是真的,它将附加验证引擎。这将是错误的。在下拉列表更改事件中,我根据第一个标志设置了类似的条件,只是它在更改时分离引擎并将第二个标志变为true(因此它将在提交时输入条件,并重新连接引擎)< / p>
答案 0 :(得分:0)
你有没有尝试过:
$("#Form-ID").validationEngine('validate');