Проблемы с перемещением JavaScript в свой собственный файл - PullRequest
2 голосов
/ 16 марта 2012

Хорошо, если вы посмотрите на код ниже, я пытаюсь сделать его более «гибким», перемещая код JavaScript в свой собственный файл, вместо того, чтобы хранить его в файле php.

Кодниже не будет работать, так как я не могу перенести $yadayada['id'] в файл JS, ну ладно, я не знаю, как, и в этом моя проблема.Как я могу использовать приведенный ниже код или какой-то другой вариант, который сработает?

Что произойдет, если вы нажмете определенное изображение (кнопку), откроется модальное окно для определенного поста в операторе while.

Я пропустил часть сообщения, поскольку здесь проблема не в этом, она открывает модальное окно для правильного сообщения.

Заранее спасибо!

$yadaya = mysql_query("blablabal")
while($yadayada = mysql_fetch_assoc($yadaya)
{
    <div id="kommentera<?=$yadayada['id']?>" class="settingsBox" style="display: none; width:500px; font-size: 14px;">
    <textarea id="text<?=$yadayada['id']?>" class="textarea" style="width: 493px; height:80px;"></textarea><br />
    <span class="buttons" style="float:left;">
    <button id="kommenteraFilm" id1="<?=$yadayada['id']?>" uid1="<?=$yadayada['guid']?>" uid2="<?=$acc_info['id']?>" class="positive" type="submit" name="kommentera"><img src="<?=$static?>/img/bullet_go.png" alt="" />Kommentera</button>
    </span>
    <?php                                
    ?>
    </div>                                                                                          

    echo '
    <div id="se-kommentera'.$yadayada['id'].'" class="testing" style="float:right; margin-top:-2px; cursor:pointer;">
    <img src="'.$static.'/img/icon_kommentera.png" height="15px" width="15px" alt="" title="Kommentera" />
    </div>'
    ;
}

нижний колонтитул:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="<?=$static?>/js/mylibs/dependency.js"></script

dependency.js:

$(function() {
    $('#se-kommentera<?=$yadayada['id']?>').click(function (e) {
        $('#kommentera<?=$yadayada['id']?>').modal();

          return false;
    });    
});                                

ОБНОВЛЕНИЕ

Чтобы ответить на некоторые ответы, я думаю, что вызабывая, что я не могу получить доступ к оператору while вне самого оператора, поэтому делать js-файл php-файлом бесполезно.

Файл JS должен находиться ниже файла библиотеки jQuery, который находится в нижнем колонтитуле.

Ответы [ 4 ]

2 голосов
/ 16 марта 2012

Вы можете генерировать Javascript через PHP (но это не очень хорошая идея)

Чтобы прямо ответить на ваш вопрос: вы можете «генерировать» Javascript динамически через код PHP. Например:

<!-- note that the source is .php so that the server processes it as such -->
<script type="text/javascript" src="dependency.php"></script

И dependency.php будет выглядеть так:

<?php
// tell the browser how to interpret what we 'll be sending
header('Content-Type: text/javascript');

// get reference to any variables we need
$yadayada = /* ... */
?>

$(function() {
    $('#se-kommentera<?=$yadayada['id']?>').click(function (e) {
        $('#kommentera<?=$yadayada['id']?>').modal();
          return false;
    });    
});

Все это действительно то же самое, что вы делаете при выводе HTML с PHP, только теперь вы выводите Javascript. Но проблема заключается в в том, что вы выполняете одну и ту же работу (что требуется для получения $yadayada) два раза один раз для вашего HTML и один раз для вашего JS.

Так что же является хорошей идеей?

Просто измените разметку, чтобы не нужно было знать что-либо внутри $yadayada, когда вы пишете свой JS; Таким образом, код может оставаться статичным. Например:

HTML:

<div class="se-kommentera testing">
    <img src="..." height="15px" width="15px" alt="" title="Kommentera" />
    <div class="settingsBox kommentera">
    </div>
</div>

JS:

$(function() {
    $('.se-kommentera').click(function (e) {
        $(this).find(".kommentera").modal();
        return false;
    });    
});

То, что я сделал здесь, - это предоставил способ найти соответствующий .kommentera div не с абсолютным идентификатором (id), а способом относительно к .se-kommentera, по которому щелкнули.

Для удобства я решил поместить один div внутри другого и взять его с помощью .find; но это не обязательно, и вы могли бы сделать десятки различных вариантов здесь. Например, вы можете дать обоим элементам div id, как вы делали раньше, а затем сделать что-то вроде этого:

$(function() {
    $('.se-kommentera').click(function (e) {
        var id = this.id.replace("se-", "");
        $("#" + id).modal();
        return false;
    });    
});
0 голосов
/ 16 марта 2012

Если вы хотите, чтобы ваши файлы javascript могли выводить переменные PHP, лучший способ, о котором я могу подумать, - это добавить mimetype в ваш файл htaccess.

Что-то вроде следующего будет работать для Apache ...

AddType application/x-httpd-php .js
0 голосов
/ 16 марта 2012

пытались ли вы отобразить $ yadayada внутри файла js?

Этот поток может помочь вам Передача переменной PHP во внешний файл JS

0 голосов
/ 16 марта 2012

Один простой способ сделать это - дать файлу JavaScript расширение .php вместо обычного .js. Таким образом, PHP-код будет выполняться на сервере перед отправкой JavaScript клиенту. Если вы укажете type="text/javascript" в теге скрипта, браузер не будет против расширения .php в вашем JS-файле.

...