В моем <body> есть компонент, который вставляет скрипт, который должен запускаться только после полной загрузки всей страницы:

<script>
    $('<script id="smallPlacarScriptdId">\
$(window).load(function() {\
        $(".main.right").hide();\                                                 
        $("#rightzero").show();\
        $(".comp.smallPlacard.firstChild").click(function () {\
            var clicked = $(this).parent().attr("id");\
            $("main.right").hide();\
            $("#right"+clicked+"").show();\
        });\
})\
    <\script>').appendTo("body")
</script>

Этого не происходит, и этот скрипт (1) правильно вставлен в DOM, но (2) не работает (не скрывает .main.right и не показывает #rightzero). Я подумал, что, используя этот подход, я гарантирую, что это будет то же самое, что и просто поместить этот скрипт в нижнюю часть <body>, но это не так. Фактически, если я помещу это (не динамически как это) в мою страницу, это даст желаемый результат. Я попытался setTimeout() проверить свою теорию, но я получаю сообщение об ошибке в jQuery, и я заблудился.

1
Paulo Janeiro 15 Дек 2015 в 00:20

3 ответа

Лучший ответ

Это может быть проблемой:

<\script>').appendTo("body")

Браузер может подумать, что вы на самом деле закрываете тег скрипта. Измените это на

</' + 'script>').appendTo("body")

Проверьте этот поршень: http://plnkr.co/edit/Oc6yrFMdPoW2WV257CBQ?apre >

2
Aᴍɪʀ 14 Дек 2015 в 22:08

Просто используйте этот код

<script id="smallPlacarScriptdId">
$(window).load(function() {
    $("main.right").hide();                                            
    $("#rightzero").show();
    $(".comp.smallPlacard.firstChild").click(function () {
        var clicked = $(this).parent().attr("id");
        $("main.right").hide();
        $("#right"+clicked+"").show();
    });
})
</script>
0
Swarnendu Paul 14 Дек 2015 в 21:25

Извините, я не прочитал ваш вопрос достаточно хорошо.

Javascript позволит вам получить доступ к необъявленным переменным, так что используйте это в своих интересах. Проверьте, установлена ли переменная, undefined считается ложным, поэтому нет необходимости в инициализации. Как только вы введете код, просто установите его в true, чтобы больше ничего не выполнялось.

Надеемся, что это решит проблему для вас, но вы действительно должны смотреть с сервера, избегая javascript, он раздувает страницу.

<script>
    if (!myScriptHasLoaded)
    {
        myScriptHasLoaded = true;
        $(window).load(function() {
            $("main.right").hide();                                                 
            $("#rightzero").show();
            $(".comp.smallPlacard.firstChild").click(function () {
                var clicked = $(this).parent().attr("id");
                $("main.right").hide();
                $("#right"+clicked+"").show();
            });
        });
    }
</script>
0
Vince 15 Дек 2015 в 14:58