2011-04-15 41 views
0

我创建了一个JavaScript工具,使用美容插件,使用美容提示来显示列表选项的菜单,然后绑定动作。问题与IE浏览器中的jQuery功能定义?

我开始用一个简单的div来定义菜单项

<div id="menu-div"> 
    <a href="javascript:;" id="link-one">text link one</a><br /> 
    <a href="javascript:;" id="link-two">text link two</a><br /> 
    <a href="javascript:;" id="link-three">text link three</a><br /> 
</div> 

然后实例的美人尖用下面的代码:

$("#menu-toggle").bt({ 
     contentSelector: "$('#menu-div').html()", 
     preShow: function(box) { 
     $("a[id^=link-]").click(function() { 
      //do something 
     }); 
    }); 

我添加了“ preShow'功能,因为由于某种原因,直到div被启用后才发现“link-”id。(?)。这在firefox,safari和chrome中可以很好地工作,因为我可以点击菜单切换,查看三个链接,单击链接一,并且发生链接正确的操作等等。

这在Internet Explorer中工作正常,但只在第一次。第二次通过(点击显示菜单,点击另一个链接),Internet Explorer似乎无法找到相同的ID。

关闭菜单后,我是否必须取消绑定功能?

这里的美容秘诀是如何处理的预演功能:

// trigger preShow function 
// function receives the box element (the balloon wrapper div) as an argument 
opts.preShow.apply(this, [$box[0]]); 
+0

我不会使用'href =“javascript:;”'。改用'href =“#”'。此外,你是否将此代码包装在'$(document).ready(function(){...'? – Blender 2011-04-15 20:46:24

回答

0

感谢所有的建议 - 我觉得我的工作它回到我的问题后,我意识到我只需要找到一种方法来解除绑定事件处理程序,以便它可以在Internet Explorer中工作。 BeautyTips有一个隐藏后的回调是完全适用于这个,所以我加了下面的代码:

postHide: function(box) { 
     $("a[id^=link-]").unbind(); 
    }, 

和这个工作在所有浏览器预期。任何人都知道一个很好的资源来理解为什么事件处理在Internet Explorer中的工作方式会有所不同?

0

这段代码看起来是缺少一个大括号

$("#menu-toggle").bt({ 
    contentSelector: "$('#menu-div').html()", 
    preShow: function(box) { 
     $("a[id^=link-]").click(function() { 
     //do something 
     }); 
    } // this curly brace was missing 
});