0

我当然验证了该元素的存在。

我什至已经验证您可以读取该元素值。

但就页面的输出而言,没有任何效果(元素不可见)。

// 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中的逻辑问题......这是旧代码......并且有一种奇怪的风格。

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';
    }
};

回答

这是状态问题,所以我一直拉菜单元素。这是对我不明白的问题的 hack 修复。

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';
    }
};
4

2 回答 2

2

元素不可见

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

  1. 它有一个不可见的祖先元素(要么visibility: hidden要么display: none

  2. 它有display: none.

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

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

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

于 2012-05-10T22:00:08.830 回答
0

至于你的最后评论 - 这解释了一切。一旦您使用getElementById- 浏览器通过其 ID 检索元素,但将其称为 DOM 对象。所以抓取元素后,ID就没有意义了。一旦那个 DOM 元素被删除 - 浏览器失去了它的引用,所以你需要再次抓住它(通过任何你发现最好的方法)。关于innerHTML- 如果你不想一次又一次地跟踪和抓取每个 DOM 元素 - 你最好不要通过innerHTML. 更好的使用element.appensChild()功能。它将元素添加到父元素而不重写其innerHTML.

于 2012-05-10T22:34:23.290 回答