JQuery:如何从不区分大小写的下拉列表中选择一个值?

发布于 2024-07-30 12:25:11 字数 244 浏览 5 评论 0原文

我的场景:

  • 我有一个用户输入文本的文本框
  • 文本框有一个 onblur 函数,它尝试根据文本框输入从下拉列表(如果存在)中选择一个值

如果文本框值与以下情况相同,则效果非常好下拉列表值。 但我希望它不区分大小写。

因此,如果用户输入“stackoverflow”,那么我希望它从下拉列表“StackOverflow”中进行选择。 我怎样才能通过 jQuery 做到这一点?

My scenario:

  • I have a textbox that the user enters text
  • The textbox has an onblur function that tries to select a value from a dropdownlist (if it exists) based on the textbox input

This works perfectly fine if the textbox value is the same case as the dropdownlist value. But I want it to be case insensitive.

So if the user types "stackoverflow" then I want it to select from the dropdownlist "StackOverflow". How can I do this via jQuery?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

丿*梦醉红颜 2024-08-06 12:25:12

我认为最好的方法是从事前而不是事后看。 如果将它们全部设为小写,那么它们都是标准化的并且更易于使用。 然后你所要做的就是让用户的输入全部小写,并且匹配东西真的很容易。

另一种选择是使用过滤器函数,例如在此处找到的函数

$('something').filter(function() {
        return (new RegExp(value, "i")).test($(this).attr('attribute'));
    });

但是值和属性需要替换。

I think that the best way to do this is look at it from the before rather than the after. If you make them all lowercase, they are all standardized and easier to work with. Then all you have to do is make the user's input all lowercase, and it is really easy to match stuff.

Another option is to use a filter function, like the one found here:

$('something').filter(function() {
        return (new RegExp(value, "i")).test($(this).attr('attribute'));
    });

Value and attribute need to be replaced though.

烈酒灼喉 2024-08-06 12:25:12

在模糊时,迭代您的选项并检查它是否匹配。 然后选择匹配的一项。

在代码中:

$("#button").blur(function(){
  var val = $(this).val();
  $("#list option").each(function(){
     if($(this).text().toLowerCase() == val) $(this).attr("selected","selected");
  });
});

我还没有测试它,所以一定要检查语法错误。

On blur, iterate over your options and check if it matches. Then select the one that matches.

In code:

$("#button").blur(function(){
  var val = $(this).val();
  $("#list option").each(function(){
     if($(this).text().toLowerCase() == val) $(this).attr("selected","selected");
  });
});

I didn't test it yet, so be sure to check for syntax errors.

面犯桃花 2024-08-06 12:25:12

正则表达式 (RegExp) 函数可能是最佳选择。

var txt = new RegExp(pattern,attributes);

图案:文字图案
属性:“i”表示不区分大小写,

可以与过滤功能结合使用。 像这样的东西应该有效。

$("#textbox").blur( function () { 

    var text = $(this).val();

    var dropdownlist = 
       $("select").filter( function () {
          return (new RegExp(text, "i")).test($(this).attr("id"));
       });

    // do something to dropdownlist

});

The regular expression (RegExp) function is probably the way to go.

var txt = new RegExp(pattern,attributes);

pattern: the text pattern
attributes: "i" for case-insensitive

You can combine with filter function. something like this should work.

$("#textbox").blur( function () { 

    var text = $(this).val();

    var dropdownlist = 
       $("select").filter( function () {
          return (new RegExp(text, "i")).test($(this).attr("id"));
       });

    // do something to dropdownlist

});
一身软味 2024-08-06 12:25:11

这是另一种方法:在实际情况“StackOverflow”中找到匹配值,并用它调用 val()

  var matchingValue = $('#select option').filter(function () { 
      return this.value.toLowerCase() === 'stackoverflow'; 
  } ).attr('value');    
  $('#select').val(matchingValue);

当然,文字 'stackoverflow' 应该替换为变量。

Here's another approach: find the matching value in its actual case, "StackOverflow," and call val() with that.

  var matchingValue = $('#select option').filter(function () { 
      return this.value.toLowerCase() === 'stackoverflow'; 
  } ).attr('value');    
  $('#select').val(matchingValue);

Of course, the literal 'stackoverflow' should be replaced with a variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文