Jquery 如何为多个selectbox选项运行if/else条件?

Jquery 如何为多个selectbox选项运行if/else条件?,jquery,if-statement,drop-down-menu,Jquery,If Statement,Drop Down Menu,我试图根据用户在selectbox中的选择,使用if/else条件执行函数。selectbox允许进行多项选择,选项由optgroups分隔 我已经用.selectedIndex、.option[]selected和now、.indexOf尝试了if条件,但似乎没有任何东西符合我的预期逻辑。我正在学习javascript/jQuery,所以请原谅任何新手的失礼 对我应该做什么有什么建议吗 HTML 更新 虽然下面的答案在本例中有效,但似乎应该有一种更简单的方法可以在if语句中查询从多个选择派生的

我试图根据用户在selectbox中的选择,使用if/else条件执行函数。selectbox允许进行多项选择,选项由optgroups分隔

我已经用.selectedIndex、.option[]selected和now、.indexOf尝试了if条件,但似乎没有任何东西符合我的预期逻辑。我正在学习javascript/jQuery,所以请原谅任何新手的失礼

对我应该做什么有什么建议吗

HTML

更新 虽然下面的答案在本例中有效,但似乎应该有一种更简单的方法可以在if语句中查询从多个选择派生的数组。如果选择了两个或多个项目,是否有办法询问是否在多个选择中选择了特定选项

更新#2谢谢@andrew的提示。我想我偶然发现了我在寻找的东西。选择的答案不那么优雅,但手头的任务使用:

$.inArray('string to challenge', variable containing object array of selectbox) > -1
因此,在我的示例中,如果我想在选择中触发一些代码,比如“Intra one”,我可以:

$.inArray('Intra one', box_1) > -1
我不确定是否可以使用正则表达式来查看字符串的某些部分是否存在,但我相信可能有一种方法可以做到这一点。

我通过一些修复为您提供了一个分支。HTML和javascript中存在一些语法错误

将按钮更改为HTML,如下所示:

<input type="button" value="write" />

如果保留写入,请重命名该函数。另外,框1是一个jquery对象,.indexOf是一个数组属性(不兼容的类型)。您好,感谢您编辑我的标记。看起来,即使使用代码,也会跳过所有“if”条件,只执行“else”条件。也就是说,与每个optgroup相关的额外文本不会像预期的那样包含在条件中。这正是我遇到的问题,@andrew comment建议.indexOf不能与box_1变量一起使用?Hi。我修改了上面的例子,提供了一种更可靠的方法来做你想做的事情。酷,这确实奏效了。我必须承认,到目前为止,我所学的方法有点先进,但我期待着研究你是如何使用各种方法的。在我最初的示例中,如果能够匹配返回到“box_1”对象的短语的一部分,我尝试执行该函数。你能解释一下我是如何用我的构造完成的吗?我猜.indexOf不是答案-那么.each()呢?当然。在您的示例中,框_1是所有选定值的数组。在数组上调用indexOf时,它返回值的索引(到数组中)(如果找不到,则返回-1)。当您调用
box_1.join(“\n-”)
时,它将连接所有选定的值,而不仅仅是当前optgroup的值。在串联中使用之前,需要按索引(例如,
box\u 1[index]
)获取每个选定值。这有意义吗?那么第一个“if”条件是
if(box_1.indexOf('Complete')>-1){ctext+=“\n-Stage I\n-”+box_1[0]+“\n”;}
?比如说,如果选择了optgroup2下的两个项目,我不知道该如何扩展它,然后需要加入它们?
$.inArray('Intra one', box_1) > -1
<input type="button" value="write" />
    $(function() {

    function write() {
        var select = $('#box1');
        var ctext = '';

        select.find('optgroup').each(function() {
            var el = $(this);
            if (el.find('option:selected').length) {
                ctext += "\n- " + el.attr('label') + "\n- ";
                var items = [];
                el.find('option:selected').each(function() {
                    items.push($(this).text());
                });
                ctext += items.join(',') + "\n";
            }
        });

        $('#text').val(ctext);
        return false;
    }

    $('input').click(write);

});