将javascript移动到自己的文件后出现的问题

时间:2012-03-16 12:42:24

标签: php jquery modal-dialog

好吧,如果你看下面的代码,我试图让它更“灵活”,将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 个答案:

答案 0 :(得分:2)

您可以通过PHP生成Javascript(但这不是一个好主意)

直接回答您的问题:您可以通过PHP代码动态“生成”Javascript。例如:

<!-- 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;
    });    
});

所有这些与使用PHP输出HTML时所做的完全相同,只是现在您正在输出Javascript。但问题是你正在做同样的工作(到$yadayada需要什么),一次为你的HTML,一次为你的JS。

那么 是个好主意?

只需更改标记,以便在编写JS时 无需知道$yadayada内的任何内容;这样,代码可以保持静态。例如:

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)的适当id div,但是以{em> relative 的方式找到{{} 1}}被点击了。

为方便起见,我选择将一个div放在另一个div中并使用.se-kommentera来保持它;但这不具约束力,你可以在这里做出几十种不同的选择。例如,您可以像以前一样给两个div .find,然后执行以下操作:

id

答案 1 :(得分:0)

一种简单的方法是为JavaScript文件提供.php扩展名,而不是常规.js。这样,在将JavaScript发送到客户端之前,PHP代码将在服务器上执行。当您在脚本标记上指定type="text/javascript"时,浏览器将不介意JS文件上的.php扩展名。

答案 2 :(得分:0)

您是否尝试在js文件中回显$ yadayada?

此主题可能会帮助您Passing a PHP Variable in external JS file

答案 3 :(得分:0)

如果你希望你的javascript文件能够输出PHP变量,我能想到的最好的方法是在你的htaccess文件中添加一个mimetype。

以下内容适用于Apache ...

AddType application/x-httpd-php .js