【问题标题】:What event to catch for every <Select> option chosen [duplicate]为每个选择的 <Select> 选项捕获什么事件 [重复]
【发布时间】:2012-05-29 06:59:24
【问题描述】:

可能重复:
jquery click event on select option element in chrome

我正在使用选择标签对表格进行排序。但是,我希望每次选择选项时都进行排序,而不仅仅是在更改时进行。

(我正在使用 jquery) 这就是为什么我认为 .change() 事件不适合这种情况。

我尝试在&lt;option&gt; 上绑定 .click() 事件,但 chrome 不会触发这些事件。

有什么想法吗?

谢谢


编辑:我的解决方案

感谢大家的回复。

我最终使用不同的方法解决了这个问题。

我添加了一个中性选项:

<select>
    <option>--Select--</option>   <--new option
    <option>Name</option>
    <option>Date</option>
</select>

然后,每次直接从表中进行排序时,我都会将 Select 索引重置为 0,因此无论您选择什么,都会触发 .change() 事件。

【问题讨论】:

  • selected 你的意思是悬停在上面还是你的意思是实际选中(如用户点击它)?如果后者.change()是你想要的。
  • 我正在排序的表也可以通过单击列进行排序,并且也可以对 ASC 和 DESC 进行排序。因此,即使我选择了当前选择的选项,我也需要选择选项进行排序。 onchange() 在这种情况下不会触发
  • +1 在上面。当用户选择一个选项时, selectedIndex 会更新并触发 change 事件。选择是链条的一部分。单击将不起作用,因为单击发生在选择上,而不是选项上。
  • 嗯...刚刚看到您的回复。如果您捕获对选择而不是选项的点击,您可以只询问 selectedIndex 并根据它进行排序。
  • 在我实际选择任何内容之前,Select 上的点击事件不会触发吗?

标签: javascript jquery html select option


【解决方案1】:

每当您离开选择元素时都会触发 onblur 事件,因此如果您选择了相同的选项,它将触发它。

【讨论】:

  • 这个想法很好,但在现实中效果不佳,因为当您选择一个选项时,您期望得到响应,但它仍然是重点。它只会在您将鼠标移开(或点击“标签”)时触发
  • 但问题是,如果一个选项已经被选中,什么都不应该发生!
  • 通常是这样,但在我的具体情况下,您可以通过单击直接对表格进行排序。当您这样做时,下拉列表中“选择”的内容不一定仍然有效。
  • 当您手动单击该项目时,更改选择中的值。大声笑
【解决方案2】:

试试这个:

$('#select_box').change(function(){
   sort_using = $(this).attr('value'); // current value
   // call your sort function with this `sort_using`
   sortTable(sort_using);
});

function sortTable(foo) {
 //your code
}

【讨论】:

  • .change() 仅在您选择不同的选项(与当前选择的选项不同)时触发。我每次都需要开火..
  • 然后尝试使用click代替change,这样每次点击#select_box都可以获得默认值。
  • click() 在选择选项之前触发,如果绑定到选项,它不会在 Chrome 中触发...
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 2020-05-29
  • 2015-03-19
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
相关资源
最近更新 更多