2011-11-07 20 views
0

自从我创建一个HTA代码,我坚持使用IE :(jQuery的模具()不工作

我们需要捕获在<select>元素的更改事件,但你猜怎么着,IE不支持该事件。

所以我创建了一个方法来模仿它。随着<input type="text">当它被点击显示<select>正下方。这部分工作正常。问题是,我想隐藏select当用户点击外select

我试图赶上clickbody,它第一次正常工作,但第二次隐藏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浏览器。

+1

Internet Explorer(至少7个或更多)确实支持“更改”事件。 [这里是一个jsfiddle演示。](http://jsfiddle.net/23qm3/) – Pointy

+0

@Pointy你可以发布到一个答案,所以我可以投票给你。你应该去上学。 –

+0

哈哈确定!只需一秒... – Pointy

回答

1

Internet Explorer 7和向上(大概6,因为IE7是IE6大多与口红,但我无法测试,很容易)支持更改事件。 Here是一个非常简单的演示jsfiddle。

IE浏览器的事件确实很奇怪。例如,“更改”不会起泡(至少从<select>起,可能还有其他的东西),但jQuery为你补丁。还有复选框和单选按钮的经典问题,它们在失去焦点之前不会触发“更改”(这使其基本无用)。对于那些,我发现“点击”工作正常。

1

为使.die()正确运行,与其一起使用的选择器必须完全匹配最初与.live()一起使用的选择器。

+0

已经查过的Wha,看例子 –

+1

如果你调用$(“#demo”)。live(“click”,click_does_this); die必须被称为$(“#demo”)。die(“click”,click_does_this);而不是$('#demo')。die();特别是如果你正在处理IE兼容性。无论如何,试着用.on()和.off()来使用jQuery 1.7,他们说IE的兼容性要好得多 – John