javascript - 如何获取包含特定文本的输入标签的数量?

标签 javascript jquery html

我的目标是在用户在一个输入中输入与至少一个其他输入的文本相匹配的相同文本时进行标记。要选择所有相关输入,我有这个选择器:

$('input:text[name="employerId"]')

但是,例如,如何仅选择那些文本 = abc 的内容呢?

这是我的 change() 事件,用于检查页面上所有输入中的重复文本。我想我正在寻找类似 :contains 的内容,但要查找输入中的文本。

var inputsToMonitorSelector = "input[type='text'][name='employerId']";
$(inputsToMonitorSelector).change(function() {
    //console.log($(this).val());
    var inputsToExamineSelector = inputsToMonitorSelector 
        + ":contains('" + $(this).val() + "')";
    console.log(inputsToExamineSelector);

    if($(inputsToExamineSelector).length > 1) {
        alert('dupe!');
    }
});

或者没有这样的选择器?我是否必须以某种方式选择所有 inputsToMonitorSelector,并在一个函数中检查每个文本,增加一些局部变量直到它大于 1?

最佳答案

对于输入,您需要使用 [value="abc"].filter()

$(document).ready(function() {
var textInputSelector = 'input[type="text"][name="employerId"]';
  $(textInputSelector).on('input', function() {
    $(textInputSelector).css('background-color', '#fff');
    var input = $(this).val();
    var inputsWithInputValue = $(textInputSelector).filter(function() {
      return this.value && input && this.value == input;
    });
    var foundDupe = $(inputsWithInputValue).length > 1;
    if(foundDupe) {
      console.log("Dupe found: " + input);
      $(inputsWithInputValue).css('background-color', '#FFD4AA');
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="text" name="employerId" value="abc">
<input type="text" name="employerId" value="">
<input type="text" name="employerId" value="">
<input type="text" name="employerId" value="">

  • [value="abc"]表示如果值为 abc
  • [value*="abc"] *表示该值是否包含 abc
  • [value^="abc"] ^表示该值是否以 abc 开头
  • [value$="abc"] $表示值是否以 abc 结尾

注意: :contains()不适用于输入,并且单词 text 不与输入一起使用和 <select> ..输入和<select>有一个值(value)

在你的情况下..而不是使用

$(inputsToExamineSelector).length > 1) 

您可能需要使用.filter()

$(inputsToExamineSelector).filter('[value*="abc"]').length > 1) 

$('input[type="text"][name="employerId"]').filter(function(){
    return this.value.indexOf('abc') > -1 
    // for exact value use >> return this.value == 'abc'
}).length;

要在其上使用变量,您可以像这样使用它

'[value*="'+ valueHere +'"]'

关于javascript - 如何获取包含特定文本的输入标签的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49683009/

相关文章:

javascript - 使用 Google Cloud PubSub 继续获取 'Error sending test message to Cloud PubSub...'

javascript - 如何在系统启动时调用JavaScript(.JS)文件

javascript - 如何在functions.php(wordpress)中加载 Bootstrap 脚本和样式?

javascript - 为什么 jQuery 不能直接操作 SVG 元素的类?

javascript - 谷歌地图教程无法使用

javascript - 单击按钮 html、css、javascript 时显示更多信息

javascript - 使用装饰器中的原型(prototype)/访问基类属性访问派生类中的基类属性

javascript - 如何在return()中调用var

javascript - 为什么我的 if-else 语句没有正确执行?

jquery - 如何设置标记包含图像的宽度和高度