jQuery 1.3.2和IE 8的问题与hide()和show()

时间:2010-02-27 00:20:26

标签: jquery internet-explorer-8 hover hide show

有人可以告诉我为什么以下示例在Firefox中工作但在IE 8中不工作? 只有content_1在IE 8中才能正常工作。

Thx vijey。

<script type="text/javascript">

$(function(){
    $("#sortable").sortable({handle: '#dragable'});
});


$(function(){

   var v;

  $('div[id^="content_"]').hover(

        function () {

        v = $(this).attr('id');
            $('#'+v+' #menu').show();
            $('#'+v+' #dragable').show();
        },
        function () {
            $('#'+v+' #menu').hide();
            $('#'+v+' #dragable').hide();
        }
    );

});

</script>


<body>

<div id='sortable'>

    <div id='content_1'>

        <div id='menu' style='display:none;'>
            <div>edit</div>
            <div>add</div>
            <div>delete</div>
        </div>

        <div id='content'>Content_1</div>

        <div id='dragable' style='display:none;'>[drag]</div>
    </div>




    <div id='content_2'>

        <div id='menu' style='display: none;'>
            <div>edit</div>
            <div>add</div>
            <div>delete</div>
        </div>

        <div id='content'>Content_2</div>

        <div id='dragable' style='display:none;'>[drag]</div>
    </div>





    <div id='content_3'>

        <div id='menu' style='display: none;'>
            <div>edit</div>
            <div>add</div>
            <div>delete</div>
        </div>

        <div id='content'>Content_3</div>

        <div id='dragable' style='display: none;'>[drag]</div>
    </div>

</div>



</body>

2 个答案:

答案 0 :(得分:2)

页面中的ID必须是唯一的(html spec [1]);您有2 #menu#content等。将其更改为例如<div class="menu">以及.menu的选择器 - 应该有效。

顺便提一下,您可以使用find [2]简化悬停回调:

function () {
    $(this).find('.menu, .dragable').show(); 
}

1:http://www.w3.org/TR/html401/struct/global.html#h-7.5.2
2:http://api.jquery.com/find/

答案 1 :(得分:0)

您不能拥有多个具有相同ID的元素,它是无效的HTML,ID必须是唯一的。您的菜单元素必须是类而不是ID,如下所示:

<div id='content_1'>

    <div class='menu' style='display: none;'>
        <div>edit</div>
        <div>add</div>
        <div>delete</div>
    </div>

    <div class='content'>Content_2</div>

    <div class='dragable' style='display:none;'>[drag]</div>
</div>

和jQuery这样:

$(function(){
  $('div[id^="content_"]').hover(
        function () {
          $(this).find('.menu, .dragable').show();
        },
        function () {
          $(this).find('.menu, .dragable').hide();
        }
    );
});