如何通过jquery验证动态生成的隐藏文本区域

时间:2019-04-01 06:47:18

标签: php codeigniter jquery-validate

我正在尝试验证多个textarea数组,这些数组被动态添加并且也被隐藏。所以我所要做的就是,我使用的是contenteditable div,每当用户输入时,它就会设置textarea的值,该值是隐藏的。所以我正在验证文本区域

我研究并发现了.each函数,并使用了它。但是仍然没有用。

<div class="input-group">  
<textarea name="quiz[ques][0][ques]" style="display:none;" class="content-hidden">asd</textarea>            
<div contenteditable="true" id="question-edit-1" placeholder="Enter Question 1" name="quiz[question][]" class="content-visible valid" aria-invalid="false"></div>   
</div>

<div class="input-group">  
<textarea name="quiz[ques][1][ques]" style="display:none;" class="content-hidden">asd</textarea>            
<div contenteditable="true" id="question-edit-2" placeholder="Enter Question 2" name="quiz[question][]" class="content-visible valid" aria-invalid="false"></div>     
</div>

脚本

$('form').submit(function (e) {
var ques = $('name^="quiz[ques]"');
ques.each(function() {
    $(this).rules("add", {
        required: true,
        messages: {
             required: "Please enter the questioon"
        }
    });
});
});

1 个答案:

答案 0 :(得分:0)

您的代码...

$('form').submit(function (e) {
    var ques = $('name^="quiz[ques]"');
    ques.each(function() {
        $(this).rules("add", {
            ....
        });
    });
});

提交表单时,您不应该添加规则,否则,您不能期望在单击提交按钮之前验证字段。动态创建需要规则的新字段时,您可以添加规则。因此,从提交处理程序中删除.rules()方法,并将其放入创建这些新字段的任何函数中。

动态创建新字段->然后立即添加规则


第二,your selector is totally broken。您缺少外部括号。 Correct format for an "attribute starts with" selector is $('[attribute="value"]')

所以name属性以quiz[ques] would look like this ...

开头
$('[name^="quiz[ques]"]')

如果您需要更详细地说明选择器,则可以添加textarea元素...

$('textarea[name^="quiz[ques]"]')

最后,默认情况下,所有隐藏字段都将被忽略(未验证)。目前尚不清楚为什么textarea元素保持隐藏状态,因为用户永远无法与其交互,因此为什么需要验证它们。您可以从隐藏字段中添加/删除规则,它们将在显示时自动验证,而在隐藏时不验证。

如果需要验证任何隐藏的字段,则将覆盖默认的ignore设置。 []表示“无”。因此,ignore: []意味着什么也不要忽略(验证所有内容)。

$('#myform').validate({
    ignore: [], // ignore nothing - validate everything
    // other settings....
});