Javascript jQuery.validate和隐藏输入

Javascript jQuery.validate和隐藏输入,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,我有一个带有伪select元素的表单。伪选择元素是一个下拉菜单。单击其中一个下拉项时,将为隐藏的输入指定一个指定给该项的值。我正在使用jQuery.validate来验证表单。一个简单的验证规则绑定到隐藏的输入。如果输入没有值,则为隐藏输入和伪选择提供一个错误类,并显示一条错误消息 我的问题是更改隐藏输入的值不会触发更改、设置关键帧或模糊事件。如果将错误状态应用于隐藏的输入,则在为输入提供有效值后,该状态将保持不变。只有在再次提交表单时,输入才会正确验证 由于jQuery.validate启用了

我有一个带有伪select元素的表单。伪选择元素是一个下拉菜单。单击其中一个下拉项时,将为隐藏的输入指定一个指定给该项的值。我正在使用jQuery.validate来验证表单。一个简单的验证规则绑定到隐藏的输入。如果输入没有值,则为隐藏输入和伪选择提供一个错误类,并显示一条错误消息

我的问题是更改隐藏输入的值不会触发更改、设置关键帧或模糊事件。如果将错误状态应用于隐藏的输入,则在为输入提供有效值后,该状态将保持不变。只有在再次提交表单时,输入才会正确验证

由于jQuery.validate启用了对隐藏输入的验证,我想知道是否有一种配置或方法可以处理这个问题

编辑:


使用jQuery验证插件,这些标准事件将触发对特定元素的验证最后一个有点不同

在盒子里打字 从列表中选择 单击复选框或单选按钮 丢失输入元素的焦点 单击“提交”按钮将验证整个表单 由于隐藏元素更改值时不会触发这些事件,因此您需要使用来验证元素,从而自己触发它

您没有向我们展示任何代码,更不用说更改隐藏元素值的代码了,所以我只能给您一些通用的东西。您可以将.valid代码放在用于更改值的任何函数中

更改隐藏元素的值 调用.valid以验证隐藏元素

$(document).ready(function() {

    $('#myform').validate({  // initialize plugin
        // your options
    });

    $('#some_button').on('click', function() {
        // some imaginary button that changes the hidden value
        $('input[name="myHiddenElement"]').val('newvalue');  // <- change the hidden value
        $('input[name="myHiddenElement"]').valid();  // <- triggers validation on the hidden element
    });

});

您可能需要使用其他插件选项,如在布局中正确放置错误消息标签,否则它将在隐藏元素后的某个位置浮动。

您最好发布所有相关的问题代码抱歉,我认为代码没有严格的相关性。我的问题是关于jQuery.validate的一般功能,而不是关于我的代码的问题。相关代码将包括重现该问题所需的任何代码。在你的例子中,当人们为他们的答案创建演示时,它可以节省时间。如果将来的读者遇到类似的问题,它还可以帮助他们更好地理解问题/解决方案。谢谢。谢谢你建议使用有效的方法。这将非常有效。关于您的实现,当使用JavaScript更改值时,更改事件不会触发隐藏元素:@maxhallinan,谢谢,我将编辑我的答案并对此进行研究。
$(document).ready(function() {

    $('#myform').validate({  // initialize plugin
        // your options
    });

    $('#some_button').on('click', function() {
        // some imaginary button that changes the hidden value
        $('input[name="myHiddenElement"]').val('newvalue');  // <- change the hidden value
        $('input[name="myHiddenElement"]').valid();  // <- triggers validation on the hidden element
    });

});