在我的程序中,用户首先输入一些数据进行过滤,然后结果进入一个下拉选择菜单,此菜单称为function_1。如果只有一个结果,它将进行另一个查询,让我们调用此函数_2。 我的问题是,当我有2个或更多结果时,我应该能够: 1)通过单击选择以显示所有选项,并使用滚动条显示所有选项(如果需要) 2)在看到那里的选项之后,他单击其中的一个以激活function_2
通常的答案使用“ change”事件,但是,如果用户选择了第一个默认值(因为没有更改),将无法工作,他将不得不选择不希望的结果并返回到第一个。 在select上使用click事件也会使不必要的工作,因为它会触发两次(一次是在我打开下拉菜单时触发,另一次是在选择选项时触发)
我认为这里的主要问题是jquery选择器,但是我不确定它是否可以做到这一点。 这是我正在尝试的示例:
// function_1 in ajax
.done(result){
$.each(result.data,function (){
$('#select_ex').append("<option value...... ></option>");
if (result.count()===1){
$('#select_ex').trigger('change');
}
});
}
$('#select_ex option').change(function(){// tried with change, click or focus
function_2();
}
html包含
<select name="select_ex" id="select_ex" size="0" ></select>
编辑: 与提到的重复问题无关,因为我已经知道为什么它不选择该选项,而且它也不适用,因为它只谈论具有ID的连接器,这甚至不是重点(我可以在没有ID的情况下做我的事情)。我要求功能类似于“:selected”,但带有选项->单击。 我想到的另一种解决方法是用空/隐藏字段填充select并设置selected属性,然后过滤并使用常规change事件...但是然后第一项将是空白的,对我来说似乎不是很逻辑。 所以我来寻求任何新的想法。
EDIT2 我为多重结果添加了一个白色选项,然后通过将这一行代码添加到imvain2解决方案中(如有需要)将其删除了
$("#select_ex option[value='0']").each(function() {$(this).remove();});
答案 0 :(得分:2)
尽管修复更改功能以便选择调用而不是选项很重要,但是您的问题是默认选择的选项本身。正如您提到的,如果他们想要第一个选项,则必须选择其他选项来触发更改功能。
我建议添加“空白”选项作为第一个选项,并将其设置为选中状态。
var $select_ex = $("#select_ex");
.done(result){
$select_ex.empty().append("<option value='0'>Select Your Ex Below!</option>");
$.each(result.data,function (){
$select_ex.append("<option value...... ></option>");
});
$select_ex.val("0");
}
$select_ex.change(function_2);