【问题标题】:Compare input values using jQuery使用 jQuery 比较输入值
【发布时间】:2014-04-01 23:11:05
【问题描述】:

我有一个包含 3 个输入文件字段的表单。我想确保他们不会两次上传同一个文档。现在我的代码如下:

$(':input.File').each(function() {
    if ($(this).val() == T) {
        $this.after('<br/><span class="error">Duplicate</span>');
    }
})

代码有效,但我的问题是它总是抛出错误,因为它正在与自身进行比较。当我希望它比较除自身之外的所有文件字段时,它会识别所有文件字段。

有没有办法排除正在比较的字段?本质上,我想检查除$(this) 字段之外的所有文件字段值。

【问题讨论】:

  • 我一定很厚,但是...T 来自哪里?

标签: jquery comparison each


【解决方案1】:

如果您知道总会有至少一个重复,为什么不只允许一个重复?

i = 0;
$(':input.File').each(function() {
    if ($(this).val() == T && i != 0) {
        $this.after('<br/><span class="error">Duplicate</span>');
    }

    i++;
})

【讨论】:

  • 谢谢。像魅力一样工作。
【解决方案2】:

创建一个空数组,然后遍历每个字段,如果没有添加,则检查该字段是否在数组中。

var arr = [];

$(':input.File').each(function(){
    if(arr.indexOf($(this).val()) > -1){
        $(this).after("<br/><span class='error'>Duplicate</span> ");
    }else{
        arr.push($(this).val());
    }
})

【讨论】:

  • 为什么投反对票? +1 进行补偿,因为这实际上是我建议的,但使用数组
  • @JuanMendes 我也想知道同样的事情,但现在已经消失了。
【解决方案3】:

您可以使用地图来跟踪存在的值

(function(){
  var exists = {};
  $(':input.File').each(function() {
    if(exists[$(this).val()]){
      $this.after("<br/><span class='error'>Duplicate</span> ");
    } else {
      exists[$(this).val()] = true;
    }
  });
})()

【讨论】:

    【解决方案4】:

    我感觉这就是你要找的东西:

    jQuery: exclude $(this) from selector

    为了给你一个更具体的答案,我需要更多的代码上下文。 (即,什么是 T,代码是如何到达的,等等)

    【讨论】:

      【解决方案5】:

      对于每次用户操作后的检查:

      $('input[type=file]').change(function(){
           $('input[type=file][value="'+$(this).val()+'"]').not(this).after("<br/><span class='error'>Duplicate</span> ");
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 2021-03-01
        • 1970-01-01
        • 2015-08-30
        相关资源
        最近更新 更多