代码之家  ›  专栏  ›  技术社区  ›  Justus Romijn Tim T

在此jquery验证中优化值检查

  •  0
  • Justus Romijn Tim T  · 技术社区  · 14 年前

    我有一个表单(调查)的验证脚本。它遍历所有答案,并检查它是否是单选按钮、复选框、输入或文本区域问题。在此基础上,它分别检查一个选中值的输入(单选和复选框),或者一个除“”之外的值(input/textarea)(这不算多,但可以从它开始)。requiredMessage()在字段为空时设置警告,或在用户更正字段时删除警告。

    我正在寻找一种方法来优化这段代码,因为它看起来非常重复,但我不太确定如何开始。尽管这些块有一些共同点,但它们似乎不适合一个通用检查。欢迎任何帮助!

    注意:我不希望有一个经过全面审查的版本,我只需要在哪里寻找改进的方向,或者如何使用jQuery将这些验证检查链接在一起。

    // validate the form
    function validate(event){
        var sendform = true;
      $(".questionnaire-question-answer").each(function(){
    
    // radiobutton case
        if($(this).find("input:radio").length){
            if($(this).find("input:radio:checked").length == 0){
                requiredMessage(this, "invalid");
                sendform = false;
            } else {
                requiredMessage(this, "valid");
            }
        }
    // checkboxes case
        else if($(this).find("input:checkbox").length){
             if($(this).find("input:checkbox:checked").length == 0){
                requiredMessage(this, "invalid");
                sendform = false;
             } else {
                requiredMessage(this, "valid");
             }
        }
    // single freetext case
        else if($(this).find("input:text").length == 1) {
             if($(this).find("input:text").val() == ""){
                requiredMessage(this, "invalid");
                sendform = false;
             } else {
                requiredMessage(this, "valid");
             }
        }
    // multiple freetext case
        else if($(this).find("input:text").length > 1) {
            var content = false;
            $(this).find("input:text").each(function(){
                if($(this).val() != ""){
                  content = true;
                  requiredMessage(this, "valid");  
                }
            });
            if(content == false){
              requiredMessage(this, "invalid");
              sendform = false;
            }
        }
    // textarea case
        else if($(this).find("textarea").length){
             if($(this).find("textarea").val() == ""){
               requiredMessage(this, "invalid");
               sendform = false;
             } else {
               requiredMessage(this, "valid");
             }
        }
      });
    // check whether the form has errors
      if(sendform == true){
        return true;
      } else {
        event.preventDefault();
      }
    }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Nick Craver    14 年前

    你可以用选择器把它缩小一点,这非常接近,但不是 确切地

    function validate(event){
      var sendform = true;
      $(".questionnaire-question-answer").each(function() {
        var e = $(this).find("input:checked,input:text[value!=''],textarea[value!='']");
        //e is input/textarea elements with values
        if(e.length) {
          requiredMessage(this, "valid");
        } else {
          requiredMessage(this, "invalid");
          sendform = false;
        }
      });
    
      if(sendform) return true;
      event.preventDefault();
    }