选择框,其中一个选项检测选择

时间:2014-08-04 15:39:31

标签: jquery html

假设我有一个选择框 X n> 1 这样的选项:

<select id="X">
    <option...
    .
    .
    .
    ...</option>
</select>

现在假设我有另一个选择框 Y ,其中只有 1 选项,如下所示:

<select id="Y">
    <option value="someValue">Some Value</option>
</select>

但其他选项可以添加到选择框动态

我用

$("#X").change(/*some code here*/);
$("#Y").change(/*some other code here*/);

检测选项何时更改以显示与选择框中当前所选选项对应的某个视图 但是,只要选择框 Y 仅包含一个选项,并且用户在关注此选择框后点击此选项,显然不会触发$("#Y").change()

我想要的东西会在用户选择时再次触发,无论选择框中当前选择了什么。

以下是包含一个选项的选择框的屏幕截图:http://puu.sh/aEqcs/0eb2f7d341.png
因此,假设用户从框 X 中选择了某些内容并且发生了某些事情,现在用户选择了框 Y 中唯一可用的选项。现在必须像在$("#Y").change(/*some other code here*/);中一样运行相同的代码。这里最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

我猜我必须更换

$("#Y").change(/*some other code here*/);

$(document).on("click", '#Y option', function() {
    /*some other code here*/
});

答案 1 :(得分:0)

我将这个JSFiddle放在一起,它会在点击时触发更改事件,但仅在选择框打开时触发。只有一个问题,当用户实际更改选项时,click事件仍会被触发。 JSFiddle

HTML

<select id="Y">
    <option value="someValue">Some Value</option>
    <option value="someOtherValue">Some Other Value</option>
</select>

JS

//For this to work Values must be Unique.

var $isOpen = false;//flag to tell if select box is open or closed.
var $selectedItem;//The selected item before user clicks their option
$('#Y').click(function () {
    if ($isOpen) {
        $('#Y').trigger('change', true);
        $isOpen = false;
    } else {
        //this is needed as we only want to detect the users 2nd click, when selectbox is open.
        $isOpen = true;
        //set the currently selected item
        $selectedItem = $("#Y option:selected").val();
    }
});

$("#Y").blur(function () {
    //detect when user doesn't click second time and set to false
    $isOpen = false;
});

$("#Y").change(function (evt, wasTrigged) {
    //check if this change event was triggered in code
    if (wasTrigged) {
        //Check if the option value had changed from when the user clicked Select Box        
        if ($("#Y option:selected").val() === $selectedItem) {
            console.log("Select Item Never Changed");
        }
    } else {
        //When a user actually changes to a different option.
        console.log("User Changed");
    }
});