由于我正在创建HTA代码,所以我只能使用IE:
我们需要在<select>
元素中捕获更改事件,但是你猜怎么着,IE不支持该事件。
所以我创造了一种模仿它的方法。与<input type="text">
,当它被点击显示<select>
就在下面。这部分很好。问题是,当用户单击select
外部时,我想隐藏select
。
我试图在body
上捕捉click
,它第一次工作得很好,但第二次select
被隐藏起来。
下面是代码的简化版本:
$('.product').live('click',function(){
// Show the <select id="select"> code goes here
// this is the event to close the select
$('body').die().live('click', function(){ $('#select').fadeOut(250); return;});
// get the click on the select element
$('#select').die().live('click',function(){
// kill the close the select
// THIS IS THE .die() THAT DOES NOT WORK
$('body').die();
});
问题这个代码有什么问题吗?或者有更好的方法来做到这一点?别忘了我只能用IE了
Internet Explorer 7及以上版本(也可能是6,因为IE7主要是带口红的IE6,但我无法轻松测试)是否支持更改事件。这是一个非常简单的jsfiddle演示。
IE确实对事件做了一些奇怪的事情。例如,"更改"不会冒泡(至少从<select>
,可能还有其他东西),但jQuery会为您修补它。此外,复选框和单选按钮也存在一个经典问题,它们在失去焦点之前不会触发"更改"(这使得它们基本上毫无用处)。对于这些,我发现"click"很好。
为了使.die()正常工作,它所使用的选择器必须与.live()最初使用的选择器完全匹配。