无法在验证脚本中获取隐藏字段值

时间:2015-11-24 10:59:51

标签: jquery jquery-validate

尝试进行添加和编辑的验证(唯一)。

我无法在验证jquery脚本中检索隐藏字段值。

以下是javascript:

// included:' jquery.validate.min', - 包含这些文件

validate_branch.js

var validator = $('#form_add_branch').validate({
    errorElement: 'div',
    rules: {
        branch_name: {
            required: true,
            ValidateComma: true,
            remote: BASE_URL_PATH+ "learner/branch/is_branch_exists?branch_id="+$('#branch_id').val()
        }
    },
    messages: {
        branch_name: {
            required: languageArray['branch_name_required'],
            ValidateComma: languageArray['branch_name_comma'],
            remote: languageArray['branch_name_exists']
        }
    }
});


/* Comma validation (Comma not allowed)
 * 
 * @param value String
 * 
 * @return boolean
 * 
 */
jQuery.validator.addMethod("ValidateComma", function(value) {
    var filter = /[,]+/;
    if (filter.test(value))
    {
        return false;
    } else
        return true;
}, languageArray['branch_name_comma']);

这就是我们调用验证的方式:

<script>
    $("#btn_add_branch").on("click", function() {  
        $('#form_add_branch').validate();
        if ($('#form_add_branch').valid()) {
            var branch_name = $('#branch_name').val();
            var branch_id = $('#branch_id').val();
            $.post(BASE_URL_PATH + "learner/branch/add_branch", {branch_name: branch_name, branch_id: branch_id}, function(data, status) {
                if (data != "false") {
                    $("#succ_msg").show();
                    $("#err_msg").hide();
                    $('#branch_name').val("");
                    $('#branch_id').val("");
                } else {
                    $("#succ_msg").hide();
                    $("#err_msg").show();
                }


            });
        }
    });

    function edit_branch(branch_id) {
        BRANCH_ID = branch_id;
        $.post(BASE_URL_PATH + "learner/branch/get_branch_name", {branch_id: branch_id}, function(data, status) {
            if (data) {
                $('#branch_name').val(data);
                $('#branch_id').val(branch_id);
            }
        });
    }



</script>

注意:在远程$('#branch_id').val()中,这是空白的,但在服务器端它是。 请以正确的方式指导我。感谢。

1 个答案:

答案 0 :(得分:1)

您需要在validate方法中添加 ignore 属性。默认情况下hidden inputs未验证jquery.validate.js,因此您需要使用

覆盖此行为
$.validator.setDefaults({ 
  ignore: [] //do not ignore any input fields even though its hidden
});

上述方法为所有elements设置了该行为,而不管您forms validation var validator = $('#form_add_branch').validate({ ignore: ":hidden:not('#branch_id')" //ignore all hidden fields except #branch_id }); 。现在,如果您想 ignore 只有一个字段,那么您可以按以下方式执行此操作:

<%= f.fields_for :answers do |builder| %>
  Q: <%= builder.label builder.object.question %>
  A: <%= builder.text_area :answer %>
<% end %>