如何在没有来自php的click或onload事件的情况下执行javascript?

时间:2014-03-15 07:34:25

标签: javascript php jquery html

我有一个名为func.js的javascript,因为有一个名为show的函数需要2个参数,我需要做的是我想从php调用该函数,我不能这样做在这里使用任何click或onload事件我的脚本看起来像这样

   <html>
   <head></head>
   <script type='text/javascript' src='path/to/func.js'></script>
   <body>
        some div etc
   <form method='post' action="" >
       .....
       .....
   </form>
   </body>
   </html>

   <!-- after submit of form validation is in php -->
   <?php

       /* here I want to call javascript, where arguments are php variables 
            show('argument1','argument2'); */

       // I tried to echo like this
        echo "<script>show('$argument1',$argument2')</script>";
   ?>

那么我的案例的解决方案是什么?

5 个答案:

答案 0 :(得分:1)

您拥有的代码应该可以工作...... 大多数。不幸的是,你没有告诉我们为什么它不起作用 - 是否有PHP错误?有JS错误吗? - 你没有向我们展示PHP输出的结果JavaScript或变量的内容,所以我们可以自己解决。

这个问题的两个最可能的解释(以及我目前唯一发生的解释)是:

变量

中的数据存在问题

变量包含无法在JavaScript字符串中出现的字符或必须在JavaScript字符串中转义的'个字符。

JSON是JavaScript的一个充分子集,json_encode函数将转义(并引用)大多数数据,因此它适合在JS中使用。

<script>
show(<?php echo json_encode($argument1); ?>, <?php echo json_encode($argument2); ?>)
</script>

你的时间有问题

您有一条HTML评论说“在提交表单验证后是在php中”,但您共享的代码中没有任何内容可以强制执行。

您需要在脚本生成周围包含if (isset($_POST['some_data_from_your_form'])) { ... }之类的内容,以便它仅在提交表单时显示,而不是在最初加载时显示。


如果这不起作用,那么你真的需要查看变量是什么,生成的JS是什么,以及你的JavaScript错误控制台说的是什么。


HTML元素结束后不允许使用脚本元素。虽然浏览器将从该错误中恢复,但您确实应该将脚本移动到BODY内。

答案 1 :(得分:1)

它可能与参数内的数据有关,它是什么类型的数据?

echo "<script>show('".str_replace("'", "\'", $argument1)."', '".str_replace("'", "\'", $argument2)."')</script>";

如果您传递J'min等信息,则会导致问题。数据有多行吗?然后需要过滤。

答案 2 :(得分:0)

首先,您的代码已损坏

<script type='text/javascript' href='path/to/func.js'</script>

您应该将href更改为src并关闭脚本标记,因此它变为

<script type='text/javascript' src='path/to/func.js'>

此外,javascript是客户端的,这意味着你无法在PHP中调用javascript函数。

我认为这里的一个好解决方案是使用AJAX调用来验证您的表单。

答案 3 :(得分:0)

您是否尝试将参数置于引号之外?

echo "<script>show('".$argument1."', '".$argument2."')</script>";

答案 4 :(得分:0)

echo '<script type="text/javascript">show(' . $argument1 . ',' . $argument2 . ');</script>';
上面的

可能适合你。