【问题标题】:jQuery .insertAfter only once with a class selectorjQuery .insertAfter 仅使用一次类选择器
【发布时间】:2016-08-05 07:46:20
【问题描述】:

当输入正确的值时,我有以下代码可以正常工作以在输入字段后插入成功范围。但我的问题是每次我离开现场时它都会增加跨度。从问题Jquery insertAfter only once if element exist 我知道我可以在创建时设置跨度的ID,并在每次事件触发时检查长度以查看它是否已经存在。但是我不确定在使用类来选择字段时如何做到这一点。

任何有关类选择器的帮助都会有所帮助。

$(".systemFieldName").blur(function(){
          var val = $(this).val();
          var exists = $.inArray(val,allFields);  
    if (val!="" && exists>=0){
      $("<span class='label label-success'>Valid</span>").insertAfter(this).one();
    } 
});

【问题讨论】:

  • 在 if 条件下检查$(this).val().length
  • 另一种方法是使用 .systemFieldName 类存储是否已将成功跨度作为属性添加到元素中。即:$(this).attr('correct, 1)` 用于设置,if ($(this).attr('correct') == 1) 用于检查。
  • 你应该绑定一个更改事件,而不是模糊。

标签: javascript jquery html events jquery-selectors


【解决方案1】:

这应该会有所帮助。

allFields=["121",'test'];
$(".systemFieldName").blur(function(){
          var val = $(this).val();
          var exists = $.inArray(val,allFields);
          //See if the next element is a span with class label.
          var nextEl=$(this).next(); //next element
          var add=true; //add by default 
          if(nextEl.hasClass('label-success')) add=false; //don't add.

    if (val!="" && exists>=0 && add){ //only insert if all conditions are true.

      $("<span class='label label-success'>Valid</span>").insertAfter(this).one();
    }else if((val == "" || exists < 0) && !add) { // The !add means there is already the Valid span, we can safely remove nextEl, if the value changes.

      nextEl.remove();
    } 
});

https://jsfiddle.net/ym66f48p/2/

检查以确保下一个元素是一个跨度,它还包括一个删除函数,如果稍后更改该值,它将删除有效的跨度,但仅当下一个元素已经是一个有效的跨度时。

使用 121 或 test 作为您在 jsFiddle 中的测试。

【讨论】:

  • 完美运行。感谢您也添加删除。很有帮助。
【解决方案2】:

试试这个小提琴:https://jsfiddle.net/8jpc74z8/

我在这里所做的只是检查是否已经添加了 systemFieldName 的任何兄弟。如果没有,则添加。

 if($(".systemFieldName +.label-success").length === 0){

【讨论】:

  • 您不需要同时检查 systemFieldName 和 label-success.label-success 就可以完成这项工作,此外,作为建议,使用 .change 事件而不是模糊。您还需要删除不满足条件的元素(当前从您的代码中丢失)。这是一个例子:jsfiddle.net/DinoMyte/8jpc74z8/1
  • 不。在现实世界的场景中,他可能有多个具有相同类的输入字段,并希望在其旁边添加成功 div。而关于不满足的条件,OP也没有要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
相关资源
最近更新 更多