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

答え

これは状態の問題だったので、メニュー要素を引っ張り続けました。これは、私が理解していない問題に対するハック修正です。

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: hiddendisplay: none)

  2. それは持っていdisplay: noneます。

  3. ページ外です。(または、少なくとも、それは目に見えるボックスの外側にあります。その親または他の先祖が持ってoverflow: hiddenいて、その親/先祖の寸法の外側に配置されている場合...)

  4. 寸法がない (たとえば、幅と高さの両方が 0 である) ため、表示されますが、表示されません。

  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 に答える