写入element.style.visibility对页面没有影响(相同的ID有不同的地址?)

时间:2012-05-10 21:57:59

标签: javascript

我当然确认该元素存在。

我甚至已经确认您可以阅读该元素值。

但是对于页面的输出没有效果(元素不可见)。

// debug verificatoin
alert('debug on: domMenu.drop_down_element.style.visibility: ' + domMenu.drop_down_element.style.visibility );

// write action 
domMenu.drop_down_element.style.visibility = 'visible';

这是代码......它在第一次运行时起作用..但是在失败之后..这是javaScript中的逻辑问题我相信......这是旧代码......并且有一种奇怪的风格。 / p>

var domMenu = 
{
    TIME_DELAY:             1000,
    time_out_id:            0,
    drop_down_element:      0,
    top_mouse_over:  function ( id ) 
    {
        if( !domMenu.drop_down_element )
        {
            domMenu.drop_down_element = document.getElementById( 'wrap_drop_down_new' );
            domMenu.top_element = document.getElementById( 'top_new' );
        }
        clearTimeout( domMenu.time_out_id );
        domMenu.show_menu();
    },
    bottom_mouse_over: function() 
    {
        clearTimeout( domMenu.time_out_id );
    },
    mouse_out: function()
    {
        domMenu.time_out_id = setTimeout( domMenu.hide_menu, domMenu.TIME_DELAY );
    },
    hide_menu:function()
    {
        domMenu.drop_down_element.style.visibility = 'hidden';
        domMenu.top_element.style.border = '1px solid #faf7f7';
    },
    show_menu:function()
    {    
alert('debug on: domMenu.drop_down_element.style.visibility: ' + domMenu.drop_down_element.style.visibility );
        domMenu.drop_down_element.style.visibility = 'visible';
        domMenu.top_element.style.border = '1px solid #cfcaca';
        domMenu.top_element.style.borderBottom = '3px solid #cfcaca';
    }
};

答案

这是州的一个问题所以我只是继续拉菜单元素。这是对我不理解的问题的黑客修复。

var domMenu = 
{
    TIME_DELAY:             1000,
    time_out_id:            0,
    drop_down_element:      0,
    top_mouse_over:  function ( id ) 
    {
        domMenu.drop_down_element = document.getElementById( 'wrap_drop_down_new' );
        domMenu.top_element = document.getElementById( 'top_new' );

        clearTimeout( domMenu.time_out_id );
        domMenu.show_menu();
    },
    bottom_mouse_over: function() 
    {
        clearTimeout( domMenu.time_out_id );
    },
    mouse_out: function()
    {
        domMenu.time_out_id = setTimeout( domMenu.hide_menu, domMenu.TIME_DELAY );
    },
    hide_menu:function()
    {
        domMenu.drop_down_element.style.visibility = 'hidden';
        domMenu.top_element.style.border = '1px solid #faf7f7';
    },
    show_menu:function()
    {    
        // alert('debug on: domMenu.drop_down_element.style.visibility: ' + domMenu.drop_down_element.style.visibility );
        domMenu.drop_down_element.style.visibility = 'visible';
        domMenu.top_element.style.border = '1px solid #cfcaca';
        domMenu.top_element.style.borderBottom = '3px solid #cfcaca';
    }
};

2 个答案:

答案 0 :(得分:2)

  

元素不可见

除非您向我们展示您的标记和CSS,我能想到的唯一事情是:

  1. 它有一个不可见的祖先元素(visibility: hiddendisplay: none

  2. 它有display: none

  3. 它不在页面上。 (或者至少,它在任何可见框之外;如果它的父或其他祖先有overflow: hidden并且它位于该父/祖先的维度之外......)

  4. 它没有尺寸(例如,宽度和高度均为零),所以它是可见的,你只是看不到它。

  5. Michael Sazonov指出其父母(或其他祖先)可能有opacity: 0。 (或者元素本身可以拥有它。)

答案 1 :(得分:0)

至于你的上一条评论 - 这解释了一切。使用getElementById后,浏览器会按ID检索元素,但会将其作为DOM对象引用。因此,在抓取元素之后,ID就没有任何意义了。删除DOM元素后 - 浏览器会丢失其引用,因此您需要再次获取它(通过任何方法找到最佳)。关于innerHTML - 如果您不想一次又一次地跟踪和抓取每个DOM元素 - 最好不要通过innerHTML重写。更好地使用element.appensChild()功能。它将元素添加到父元素而不重写其innerHTML