无法找到如何定义$(this)中是否存在id

时间:2013-09-27 09:57:28

标签: jquery input this undefined attr

在许多字段集中,使用下一个按钮我会尝试查找是否存在“#required”id输入,然后,如果它为空,则返回false(保留在此字段集中),否则继续操作...

if ($(this).attr('required').length == 0) {
    alert ('oui');
    if (!$(this).attr('required')) 
        return false;
}
else 
    alert ('non');

$(this).attr('required').lengthundefined,因为找不到id

需要帮助,谢谢大家。

我解释:在fieldset(dynamicaly created)中,如果存在id为#required的输入,我必须检查它是否为空。如果是,单击按钮将返回false。 我是法国人,也是jQuery的新手,所以很遗憾= \

HTML:

[...]
   <fieldset>
      <h2 class="fs-title">Accueil Particulier</h2>
      <h3 class="fs-subtitle">Nombre de personnes :</h3>
      <input type="number" class="required" name="par_venu_f" placeholder="Femme(s)"/>
      <input type="number" class="required" name="par_venu_h" placeholder="Homme(s)"/>
      <br/><br/><input type="button" name="previous" class="previous action-button" value="Pr&eacute;c&eacute;dent"/>
      <input type="button" name="next" class="next action-button" value="Suivant"/>
   </fieldset>
[...]

编辑:

好的,现在我在这里:

  if ($(this).parent().children().hasClass('required')) {
    if ($(this).parent().children('.required').val().length == 0) {
      alert('find, empty')
      return false;
    };
    alert ('find, full');
  }
  else alert ('not find');

没关系,但只检查第一个输入[type = text],我该如何查看其他输入?

编辑2: 我尝试.each()函数,但不明白它是如何工作的......

答案:

非常感谢@TrueBlueAussie,即使我几分钟前发现这一点:

  //check if class="required" exist
  if ($(this).parent().children().hasClass('required')) {
    //start of each class="required"
    $(this).parent().children('.required').each(function() {
      //if empty, do not continue
      if ($(this).val().length == 0) {fill_required = false;};
    //end each
    });
  // end if exist
  };

  // if there is one empty field, will be false so ...
  if (!fill_required) {
    // make it true before leave then ...
    fill_required = true;
    // leave.
    return false;
  //end if one empty
  };

1 个答案:

答案 0 :(得分:0)

您不应该在页面上有重复的ID。使用classdata-...属性代替“必需”标记,因为它们通常不止一个。

您还需要检查是否存在标志(不是其长度),然后检查输入值(例如使用val())。看起来您正在将“必需”测试与“输入字段值为空白”测试混合起来。

如果您使用属性(例如data-required=""),您的代码将类似于:

if ($(this).data('required') && $(this).val().length == 0) {
    alert ('oui');
    return false;
}
else 
    alert ('non');

如果您使用类,它将类似于:

if ($(this).hasClass('required') && $(this).val().length == 0) {
    alert ('oui');
    return false;
}
else 
    alert ('non');

我个人建议在这种情况下使用一个必需的类,因为它也意味着你可以设置所需的字段有点不同(输入等不同颜色的边框)。

您可能希望在长度检查之前修剪您的值,以便忽略空白(空格)

更新 - 基于对问题的更改:

如果要检查所有“必填”字段,则需要像这样循环:

   // Default is "OK to submit"
   var allow = true;

   // test each required field for a value
   $('.required').each(function(){
       $input = $(this);

       // If we don't have a value, abort with "NOT OK to submit"
       if ($input.val().length == 0){
            allow = false;
            return false;   // <<< this just aborts the each() call
       }
   }
   if (allow){
       alert ('non');
   }
   else {
       alert ('oui');
       return false;
   }

可以简化/缩短,但我希望它能清楚它的作用。