【问题标题】:checking if value in dropdown list检查下拉列表中的值
【发布时间】:2011-12-10 18:45:46
【问题描述】:

我有清单:

<td id="filter_analyst">
<select>
    <option>mike1</option>
    <option>mike2</option>
    <option>mike3</option>
</select>

我正在尝试检查是否存在某些值:

var name = 'mike1';
alert(name);
var t = ($("#filter_analyst").find("[value='"+name+"']").length) > 1;
alert(t);

但是弄错了……

我做错了吗? http://jsfiddle.net/BFMD4/32/

提前致谢!

【问题讨论】:

  • 没有value 属性...
  • 您检查名称是否存在的逻辑实际上是检查该名称是否存在多个,您应该使用 > 0

标签: jquery list select


【解决方案1】:

value 不是选项的标签,而是&lt;option&gt; 中的 HTML 标记。

查看这个工作示例:http://jsfiddle.net/ZZaSW/

[编辑] 另一个更像您的 HTML 的示例(但没有表格的 &lt;td&gt; 不起作用,因此我为示例添加了 &lt;div&gt;)。

这是 HTML:

<div id="filter_analyst">
    <select>
        <option value="mike1">mike1</option>
        <option>mike2</option>
        <option>mike3</option>
    </select>
</div>

还有js:

var t = $('#filter_analyst').find('option[value=mike1]').length > 0;

【讨论】:

  • 他想要的是名字而不是价值!
  • 这是正确的html语法,所以他应该根据适当的标准更改他的html
  • @Jmax 如果值将像函数参数一样动态,那么我怎样才能使上述解决方案起作用?以下不起作用例如 :: function (strVal){var t = $('#filter_analyst').find('option[value=strVal]').length > 0; }
【解决方案2】:

http://jsfiddle.net/BFMD4/37/

<table>
    <tr>
        <td id="filter_analyst">
            <select id="dropdown1">
                <option value='mike1'>mike1</option>
                <option>mike2</option>
                <option>mike3</option>
            </select>
        </td>
    </tr>

//Find by value
alert($("#dropdown1 option[value='mike1']").length);
//Find by text
alert($("#dropdown1 option:contains('mike1')").length);

在您的原始示例中,td 选择器无法正常工作,因为它缺少包装表和 tr 标记。

【讨论】:

    【解决方案3】:

    Try demo

    var name = 'mike1';
    var t = $("#filter_analyst select").find("option").filter("[text='" + name + "']").length >= 1;
    alert(t);
    

    【讨论】:

    • 你是对的!用单个单词就可以了,但是用一个句子你必须有''。试试这个jsfiddle.net/BFMD4/44
    【解决方案4】:

    试试这个 HTML如下

    <select id="ddltest">
    <option value="mike1">mike1</option>
    <option value="mike2">mike2</option>
    <option value="mike3">mike3</option>
    

    JS代码如下,

     var name = 'mike1';
                var t = $("#ddltest option:contains(" + name + ")").val();
                if (t !== undefined) {
                    alert(t);
                } else {
                    alert('Name not existing');
                }
    

    【讨论】:

      【解决方案5】:

      有效答案

      http://jsfiddle.net/BFMD4/45/

      var name = 'i am mike1';
      var t = $("#filter_analyst select").find("option").filter(function (){return $(this).text()==name }).length
      alert(t);
      

      【讨论】:

      • @Reigel,option:contains 很好(我添加了option 前缀)
      • 那是一个更好的镜头。这是工作的jsfiddle顺便说一句:jsfiddle.net/xX3nw
      • 不!这不是... ;) :contains() 也会为 I am mike1 返回 true...不好...不是吗?
      • @RoyiNamir:这就是为什么我将其发布为您的答案的评论,但您可以自己发布它。这是证明它有效(或无效)的更好方式。
      • @Reigel:感谢您解释为什么 :contains() 是一个糟糕的选择
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 2020-04-11
      • 2022-01-12
      • 2021-11-26
      • 1970-01-01
      相关资源
      最近更新 更多