【问题标题】:Use PHP to conditionally render a Javascript function call in the browser使用 PHP 有条件地在浏览器中渲染一个 Javascript 函数调用
【发布时间】:2016-04-05 10:55:12
【问题描述】:

我有一个在点击时成功触发“加载更多”的按钮。一旦被点击,就会设置一个 SESSION 变量,这样当用户重新加载页面时,新帖子应该会显示为已经加载,这样用户就不需要再次点击“加载更多”。

因此,我想根据是否设置了 SESSION 或 COOKIE,在 PHP IF 语句中呈现相同的“加载更多”Javascript 函数:

<?php
if ((isset($_SESSION['isloaded'])) || (isset($_COOKIE['isloaded']))){
echo '<script>loadmore(\'posts\');</script>';
}
else {
echo '<a href="#" onClick="return false" onmousedown="javascript:loadmore(\'posts\');" class="btn btn-primary" id="load-more-btn">Load More</a>';
}
?>

然而,一旦页面被渲染,Javascript 就不会被触发。我做错了什么?

【问题讨论】:

  • loadmore 函数在哪里定义与此代码 sn-p 相关?它应该在您尝试调用它之前定义。检查浏览器控制台是否有错误。
  • 你能添加你代码的javascript部分吗
  • 感谢@Austin,事实上我的 Javascript 是在文档末尾加载的,这就是它不起作用的原因!
  • 不是重复的问题,我猜只是标题有点误导

标签: javascript php if-statement


【解决方案1】:

正如@Austin 和@Angry Coder 所说,检查您的控制台是否有错误。

另外,请确保在调用函数 loadmore() 之前对其进行定义。因此,要么将函数声明放在 loadmore('posts'); 调用之上,要么将调用添加到 onload 或类似的东西上。

另一件事,也许为了清楚起见,您可以编写您的代码(但这是一种意见):

<?php  if ((isset($_SESSION['isloaded'])) || (isset($_COOKIE['isloaded']))) { ?>
        <script>loadmore('posts');</script>
<?php } else { ?>
        <a href="#" onClick="return false" onmousedown="javascript:loadmore('posts');" class="btn btn-primary" id="load-more-btn">Load More</a>
 <?php } ?>

【讨论】:

    【解决方案2】:

    要让你的 JavaScript 自动运行,你可以使用onLoad event,比如

    <body onload="loadmore('posts')">
    ...
    </body>
    

    或许

    <body onload="conditionally_loadmore('posts')">
    <?php
    if ((isset($_SESSION['isloaded'])) || (isset($_COOKIE['isloaded']))){
    
        // Only have the function do something if we really want to.
        echo '<script>function conditionally_loadmore(s) {';
        echo ' loadmore(s); ';
        echo '}</script>';
    }
    else {
    
        echo '<script>function conditionally_loadmore(s) {';
        echo ' // Do nothing. ';
        echo '}</script>';
    
        echo '<a href="#" onClick="return false" onmousedown="javascript:loadmore(\'posts\');" class="btn btn-primary" id="load-more-btn">Load More</a>';
    }
    ?>
    

    或者,正如@Astaroth 建议的那样:

    <body
        <?php
          if ((isset($_SESSION['isloaded'])) || (isset($_COOKIE['isloaded']))) {
            echo 'onload="loadmore(\'posts\')"';
          }
        ?>
    >...
    

    【讨论】:

    • 我认为这是 OP 所需要的,只是澄清他应该添加 onload="loadmore('posts')"&lt;?= ($cookieConditions) ? 'onload="loadmore(\'posts\')"' : ''; ?&gt; 这样的东西,以便在满足“cookie 条件”时插入 onload。以防 OP 看不到应用您的答案的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    相关资源
    最近更新 更多