0

ここで問題があります。いくつかの div にいくつかのカスタム スタイルを設定して、それらを一時的に非表示にしました。ただし、ドキュメント書き込み関数を使用して外部の .js ファイルからテキストを生成すると、これらのカスタム スタイルがトリガーされないようです。

CSS:

<style type="text/css">
        .section 
        {
            display: none;
        }
        .section#form1
        {
            display: block;
        }

表示を切り替える JavaScript 関数:

function toggleVisibility(newSection) 
        {
            $(".section").not("#" + newSection).hide();
            $("#" + newSection).show();
        }

このページのほとんどのコンテンツを生成する再帰ループ関数のどこかに、これがあります

...
if (step != 1)
                    {
                        document.write("</div>");
                    }
                    document.write("<div id='form"+step+"' class='section'>");
...

JavaScript がフォームのすべての要素を特定の外部 div に出力する場所を割り当てるために、何らかのコードが必要ですか? 最初にすべての div が表示されている理由を理解できないようです。以前に同じコードを実行したところ、問題なく動作しました。おそらく、document.write の優れた代替手段でうまくいくかもしれません。document.write がすべてをオーバーライドしているように感じます。

$(document).ready(function()
    {       
        $('#show-results').click(function() 
        {
            $.post('JSAAN.php', function(data) 
            {
                var pushedData = jQuery.parseJSON(data);

                // Uses the function from loop.js
                document.write("<form id='evalForm' onsubmit='return false;'>");
                var fieldsetActive = 0;
                loop(pushedData);
            })
        })
    });

そして、ループ関数 (別のファイルにある人は次のように始まります:

function loop(obj) {
    // Starts the form
        $.each(obj, function(key, val) {
            if($.isPlainObject(val) || $.isArray(val)) { // object, call recursively
4

3 に答える 3

3

document.writeを使用して を作成する代わりに、 を使用することdivを検討してくださいdocument.createElement

var elem = document.createElement('div'),
    formStep = 'form' + step;
elem.setAttribute('id', formStep);
elem.setAttribute('class', 'section');

これにより、要素が DOM に挿入されます。document.writeこのタイプの使用にはお勧めしません。

jQuery を使用する必要がある場合:

// using document.createElements('div') as the selector is the fastest way
var elem = $(document.createElement('div')),
    formStep = 'form' + step;
elem.attr('id', formStep).attr('class', 'section');

ご不明な点がございましたら、お知らせください。

于 2012-07-17T14:04:04.887 に答える
2

を使用しないでくださいdocument.write。ページが完全に読み込まれると、ページ全体 (CSS を含む) が消去されます。

すでに jQuery を使用しているようですので、代わりにその.appendorメソッドを使用してください。.html

于 2012-07-17T14:11:54.640 に答える
0

使用すると、スタイルなどを含むページ内のすべてが上書きされるため、使用document.writeする代わりに DOM 関数を使用することを検討する必要があると思いますdocument.write

于 2012-07-17T14:12:27.800 に答える