我在php中有以下函数,它接受一个参数,意味着输出带有参数的javascript代码。
我有两个问题:
返回用引号封装了javascript代码,但是javascript代码本身的引号实际上是导致它提前中断。
javascript中的$标记无效,因为我认为jquery $标记被视为php $,有什么方法可以让javascript代码段中的美元符号和引号不会混淆PHP?
function returnJS($input){
return "
$("#toggle1").click(function(){
if(toggle != 1 && open == true){
open = false;
var panel = "#panel"+toggle;
$(panel).slideToggle("slow");
}
toggle = $input;// I need this to update from php argument
$("#panel1").slideToggle("slow",function(){
$('html, body').animate({
scrollTop: $("#panel1").offset().top
}, animation_time );});
if(open == true)
open = false;
else
open = true;
return false;
});
"
}
这样做的目的是我想构建一个具有可变数量的这些段的javascript文件,我将让php完全构造javascript文件,然后可以在网页中使用。
编辑:
例如:
<?php
$bar = 'hello';
$tmp = "My name is $bar";
echo $tmp;
?>
在我的代码中,我不希望php对$变量感到困惑,我想让javascript代码中的那些$对php完全不可见。
答案 0 :(得分:1)
你需要通过在它们前放一个\来逃避双引号。例如:
function returnJS($input){
return '
$("#toggle1").click(function(){
if(toggle != 1 && open == true){
open = false;
var panel = "#panel"+toggle;
$(panel).slideToggle("slow");
}
toggle = '.$input.';// I need this to update from php argument
$("#panel1").slideToggle("slow",function(){
$(\'html, body\').animate({
scrollTop: $("#panel1").offset().top
}, animation_time );});
if(open == true)
open = false;
else
open = true;
return false;
});
'
}
答案 1 :(得分:1)
我的建议:
示例:
$js =
<<<'JS'
$("#toggle1").click(function(){
if(toggle != 1 && open == true){
open = false;
var panel = "#panel"+toggle;
$(panel).slideToggle("slow");
}
toggle = {{input}}; // I need this to update from php argument
$("#panel1").slideToggle("slow",function(){
$('html, body').animate({
scrollTop: $("#panel1").offset().top
}, animation_time );});
if(open == true)
open = false;
else
open = true;
return false;
});
return;
JS;
$input = json_encode($input);
return str_replace('{{input}}', $input, $js);
}
print returnJS('hi "there" ');