Javascript文件中的PHP echo
因此,问题如下: 我想用PHP动态地回显javascript。此echo需要是另一个javascript文件,或者与另一个javascript文件一起使用,在单击ID时,echo的值用于调用函数 但是,当加载页面并添加document.getElementById时,当单击元素时,它们是正确的,控制台会告诉我fplaying是未定义的 PHP文件Javascript文件中的PHP echo,javascript,php,jquery,echo,Javascript,Php,Jquery,Echo,因此,问题如下: 我想用PHP动态地回显javascript。此echo需要是另一个javascript文件,或者与另一个javascript文件一起使用,在单击ID时,echo的值用于调用函数 但是,当加载页面并添加document.getElementById时,当单击元素时,它们是正确的,控制台会告诉我fplaying是未定义的 PHP文件 这很简单。试试这个 echo " <script> "; echo "document.getElementById('$source
这很简单。试试这个
echo " <script> ";
echo "document.getElementById('$source').onclick = fplaying ";
echo "</script>";
我不这么认为
document.getElementById('$source').onclick = fplaying
将在未定义fplaying时找到该函数
尝试:
而不是
function fplaying () {
alert ("test");
}
好吧,根据我对你问题的理解: 您的php创建了一个html文件,其中有一个id=值$source的元素,您希望它在单击时播放声音 如果您想像以前一样创建一段javascript,可以尝试: 回响 而$row=mysql\u fetch\u array$result{
$source = $row ['audiosource'];
echo "
document.getElementById('$source').onclick = fplaying()
";
}
echo "</script>"
这会使浏览器将脚本识别为javascript并执行它。请确保在将包含您所引用元素的页面部分打印到html之后,将脚本打印到html。否则,脚本可能会在将页面的相关部分加载到浏览器之前运行。我不确定是否可以使用这可能不是你想要的答案。但是不推荐长评论,所以我只是作为答案发布 这是可以做到的,我刚开始使用ASP.Net进行Web开发时就做过,但这仍然表明架构不正确。您使用的JavaScript是客户端脚本,因此应该附带适当的AJAX结构来完成这项工作。服务器只负责根据请求发送适当的响应,而不是指定页面在客户端的行为方式 像这样的事情-
var play = function(){
...//code to play
};
$.ajax({
url: ..//url to php page
type: ...
...,
success: function(data){
...//data responded by php page
play();
},
error: function(){
}
});
我在jQuery中使用了语法。还有其他库。就像在通过PHP打印的JS中一样,只为页面上其他地方存在的具有该ID的元素设置onclick事件。因此,更好的方法是在该可单击项中定义一个类
<button id='<?php echo $source; ?>' class='click-me'>Click Me</button>
显然,您的fplaying声明被延迟,此外,它仅在本地定义
$(function() {
console.log( "ready!" );
function fplaying () {
alert ("test");
}
});
在这种情况下,外部函数一完成,fplaying就被删除。请尝试将fplaying绑定到您的窗口
$(function() {
console.log( "ready!" );
window.fplaying = function() {
alert ("test");
};
});
为了进一步说明这一点:
function a() {
function fplaying() {
alert("Hi");
}
fplaying();
}
a();
将显示警报框
function a() {
function fplaying() {
alert("Hi");
}
}
a();
fplaying();
不会显示fplaying的警报框仅在a的范围内可见,因此它与您的情况一样未定义
现在将显示警报框fplaying声明为对象窗口的方法,或多或少也充当全局作用域
因为它是使用$function{…}延迟的;确保在加载文档之前未运行PHP呈现的调用代码。但根据上下文中的备用信息,这似乎不是问题。假设您有一个集合,来自db查询:$collection,由具有唯一id的关联数组组成 现在,您显然要显示这些对象,并要求用户对它们执行一些操作,即fplay函数。您必须做的是回显您需要的项目的任何部分,并以某种方式在html中传递项目id 因此,构建html的php部分如下所示:
echo "<ul>";
$id = $item['id'];
foreach ($collection as $item){
echo '<li><a onclick="return fplaying(' + $id + ')" href="#" class="btn"></li>';
}
echo "</ul>";
在PhpTry中,转换代码并使用类似AJAX的东西不是正确的方法。您没有指定问题/困难是什么。您应该了解javascript中的AJAX调用,您现在的做法是错误的。PHP与您的问题无关。发布呈现的HTML和javascript。另外,如果您使用的是jQuery,为什么要使用y你在做document.getElementById'$source'.onclick=fplaying?Javascript是客户端语言,而PHP是服务器端,使用它是为了同样的目的!:先生,这是正确的方法吗?:Javascript是客户端语言,而PHP是服务器端,使用它是为了同样的目的!:@PratikJoshi个人不会使用这种方法:我是只是试图帮助op调试他的code@andrew正如您所说,它是未定义的,但在按照您的建议执行时,它并没有说未定义,但函数仍然没有执行。不过,感谢您的回答!@NealVDV可能是由于顺序,即document.getElementById…在定义函数之前被发送到浏览器。如果我是您,请返回jQuery bu use$。在上,则将来加载的元素将绑定到function@andrew您建议的声明函数的方法从语义角度来看是相同的。在这两种情况下,都会有一个名为fplaying of type function的局部变量。先生,这种方法正确吗?:Javascript是客户端当PHP是服务器端时,使用它的目的是相同的!:@Sreenath问题是,当单击带有echo'd ID的元素时,控制台会说fplaying是undefined@NealVDV你检查过我的答案了吗?它包含了你想解决的问题的答案
长官,这是正确的方法吗Javascript是客户端语言,PHP是服务器端语言,使用它也可以达到同样的目的这是一个非常好的方法。您可以使用PHP进行服务器端处理,并根据仅在服务器端可用的信息生成特定于客户端的javascript代码。也就是说,基于这里的信息,这可能不是最好的方法,我个人会制作一个更通用的javascript,将必要的信息添加到属性中的html元素中,并让javascript检索它。然而,提问者应该比我有更多的信息来决定最好的方法。@HolySquirrel即使我把它放在包含函数的js文件的脚本标记之后,它仍然在控制台中显示为未定义。谢谢你的回复!好的,还可以查看cepharum对javascript的回答。在浏览器或类似程序中检查生成的带有view source的页面,并确保在这段javascript之前定义了函数fplaying。我还对我的答案做了一点修改,因为我认为我犯了一个错误。也许我在输出PHP文件时出错了,目前只是在一口井中,如果你不提供更多关于这些Javascript源如何相互作用的信息,就没有机会进一步帮助你。尝试提供HTML文件的框架,集成PHP响应的JS代码和声明fplaying的JS代码。。。尽管如此,在函数内部的布局方式只会使它在该函数内部可见。
$(function() {
console.log( "ready!" );
window.fplaying = function() {
alert ("test");
};
});
function a() {
function fplaying() {
alert("Hi");
}
fplaying();
}
a();
function a() {
function fplaying() {
alert("Hi");
}
}
a();
fplaying();
function a() {
window.fplaying = function() {
alert("Hi");
};
}
a();
fplaying();
echo "<ul>";
$id = $item['id'];
foreach ($collection as $item){
echo '<li><a onclick="return fplaying(' + $id + ')" href="#" class="btn"></li>';
}
echo "</ul>";
function fplaying (id) {
alert ("your id is " + id);
}
$source = $row ['audiosource'];
echo '<div id="'.$source['id'].'" class="sourceDiv">'.$source['name'].'</div>';
$(document).ready(function(){
$('.sourceDiv').click(function(){alert($(this).attr('id'))});
});