Диалоговое окно начальной загрузки не выполняет код JavaScript внутри него

#javascript #jquery #angularjs #twitter-bootstrap #twitter-bootstrap-3

#javascript #jquery #angularjs #twitter-bootstrap #twitter-bootstrap-3

Вопрос:

Я хочу поместить кнопки социальных сетей «мне нравится» (fb like, твиты и т.д.) В диалоговое окно начальной загрузки (внутри modal-body ), Поэтому я помещаю <script> теги.

 <div  style='display: none;' modal="shouldBeOpen" close="close()" options="opts">
    <div class="modal-header">
        <h3 class="modal-title">Modal title</h3>
        <button class="close" ng-click="close()" data-dismiss="modal">×</button>
    </div>
    <div class="modal-body">
        <table border="0" width="100%" cellspacing="0" cellpadding="0">
            <tr>
                <td>
                <!-- facebook -->
                <div id="fb-root"></div>
                <script>(function(d, s, id) {
                  var js, fjs = d.getElementsByTagName(s)[0];
                  if (d.getElementById(id)) return;
                  js = d.createElement(s); js.id = id;
                  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1amp;appId=228306107317368";
                  fjs.parentNode.insertBefore(js, fjs);
                }(document, 'script', 'facebook-jssdk'));</script>

                <div class="fb-like" data-href="https://www.facebook.com/CVsIntellect" data-width="The pixel width of the plugin" data-height="The pixel height of the plugin" data-colorscheme="light" data-layout="box_count" data-action="like" data-show-faces="false" data-send="false"></div>

                </td>
                <td>

                <!-- twitter -->
                <a href="https://twitter.com/share" class="twitter-share-button" data-url="https://www.cvsintellect.com" data-text="CVsIntellect - The best free online Resume Builder. Uses LaTeX to create your CV!" data-via="CVsIntellect" data-count="vertical">Tweet</a>
                <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p '://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

                </td>


            </tr>

        </table>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
    </div>
</div>
  

Но он ничего не показывает мне в этом диалоговом окне в браузере. Я упускаю что-то особенное?

Ответ №1:

Модальности начальной загрузки — это не что иное, как скрытые div s

Скрипт, помещенный внутри модального, не выполняется при загрузке страницы, а не при ее открытии. Если вы хотите запустить что-то в JavaScript при открытии modal, используйте:

 $('#myModal').on('shown.bs.modal', function (e) {
    // do whatever you want...
})
  

Комментарии:

1. Вы правы, если я хочу выполнить какой-нибудь обычный JS-код, это имеет смысл. Но как насчет кода этих социальных виджетов, как мне поместить виджет FB / Twitter в ваш код? Можете ли вы объяснить мне?

2. Просто запустите эти скрипты, когда modal открывается только один раз (с использованием переменной flag)

3. Эти коды виджетов должны выполняться только один раз. Так что просто включите их вне модального и просто разместите свой код кнопок внутри modal-body Смотрите этот plunkr для демонстрации: plnkr.co/edit/JbjoaXJW8PblRZO9AeKK?p=preview