假设我有一个选择框 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()
。
我想要的东西会在用户选择时再次触发,无论选择框中当前选择了什么。
以下是包含一个选项的选择框的屏幕截图:
因此,假设用户从框 X 中选择了某些内容并且发生了某些事情,现在用户选择了框 Y 中唯一可用的选项。现在必须像在$("#Y").change(/*some other code here*/);
中一样运行相同的代码。这里最好的方法是什么?
答案 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");
}
});