2011-12-05 124 views
0

我正在使用jquery validate插件验证我的表单上的所有字段,没有问题。jquery验证插件 - 使用单独表中的值验证表单

但是,我需要验证窗体标记外的html表中的行数。

下面是有问题的元件:

  1. 形式:ID = “roadForm”
  2. 选择输入:ID = “editRoad_ProjectClassification”
  3. 表:ID = “dataExistingSegments”

我的商业规则是这样的:

  1. 如果“editRoad_ProjectClassification”选择的值等于“NO TREATMENTS”,则表“dataExistingSegments”中的行数必须等于零。
  2. 如果“editRoad_ProjectClassification”选择的值不等于“NO TREATMENTS”,那么表“dataExistingSegments”中的行数必须大于零。

我已经创建了两个自定义规则的验证如下:

  1. 要验证有表中没有行如果“editRoad_ProjectClassification”等于“无治”。

    g$.validator.addMethod("roadWithNoTreatmentsHasNoSegments", function (value, element, params) { 
    var pc = g$('#editRoad_ProjectClassification').val(); 
    var segmentCount = g$('#dataExistingSegments tbody tr').length; 
    
    if (pc == 'NO TREATMENTS' && segmentCount > 0) { 
        return this.optional(element) || false; 
    } 
    else { 
        return this.optional(element) || true; 
    } 
    }, g$.format("Must have no segments if Project Classification is 'NO TREATMENTS'") 
    ); 
    
  2. 要验证有在表中的至少一行,如果“editRoad_ProjectClassification”不等于“否治”

    g$.validator.addMethod("roadWithTreatmentsHasAtLeastOneSegment", function (value, element, params) { 
    var pc = g$('#editRoad_ProjectClassification').val(); 
    var segmentCount = g$('#dataExistingSegments tbody tr').length; 
    
    if (pc != 'NO TREATMENTS' && pc != '' && segmentCount == 0) { 
        return this.optional(element) || false; 
    } 
    else { 
        return this.optional(element) || true; 
    } 
    }, g$.format("Must have at least one segment if Project Classification is not 'NO TREATMENTS'") 
    ); 
    
  3. 然后验证形式,我有以下:

    g$("#roadForm").validate({ 
    errorElement: "span", 
    rules: { 
        editRoad_Jurisdiction: "required", 
        editRoad_TreatmentDate: { 
         "required": true, 
         date: true, 
         roadDateIsValidForMultiYearPlan: true 
        }, 
        editRoad_ProjectClassification: "required", 
        editRoad_ImprovementType: "required", 
        editRoad_SurfaceType: "required", 
        editRoad_MultiYear: "required", 
        editRoad_LifeExpectancy: { 
         "required": true, 
         digits: true 
        }, 
        editRoad_MDOTJobID: { 
         digits: true 
        }, 
        editRoad_ProjectID: { 
         maxlength: 50 
        }, 
        dataExistingSegments: { 
         "required": true, 
         roadWithTreatmentsHasAtLeastOneSegment: true, 
         roadWithNoTreatmentsHasNoSegments: true 
        } 
    }, 
    messages: { 
        editRoad_Jurisdiction: "Please select an option", 
        editRoad_TreatmentDate: { 
         required: "Please select an date", 
         date: "Please enter a properly formatted date" 
        }, 
        editRoad_ProjectClassification: "Please select an option", 
        editRoad_ImprovementType: "Please select an option", 
        editRoad_SurfaceType: "Please select an option", 
        editRoad_MultiYear: "Please select an option", 
        editRoad_LifeExpectancy: { 
         required: "Please enter a value", 
         digits: "Must be a valid number" 
        }, 
        editRoad_MDOTJobID: { 
         digits: "Must be a valid number" 
        }, 
        editRoad_ProjectID: { 
         maxlength: "Cannot be more than 50 characters long" 
        } 
    } 
    }); 
    

这不是工作,我认为这是因为“数据ExistingSegments“表格不在表格内。但由于标记和CSS的完成方式,我不能将此表放置在表单中。我怎样才能使这个工作?

回答

1

嗯,我想通了,我想我应该在这里发布给其他任何人可能需要这样做。

我在表单中创建了一个文本输入并对其进行了设置,使其看起来像一个标签,并将其禁用,以便用户无法输入它。

然后,我将验证规则分配给此输入,而不是表格。现在验证工作和错误信息正常显示。

另一件事,我试验了隐藏输入。我希望输入可以隐藏起来,但验证信息仍然会显示出来。但显然,jQuery验证插件不适用于表单中任何隐藏字段的验证。所以这没有奏效。输入必须是可见的,这就是为什么我将它设计成看起来像一个标签,并禁用它(像标签一样工作)。

0

有一种方法可以对jQuery验证插件中的隐藏字段应用验证。

您只需放,忽略:[] 或者您可以定义您不想验证的控件