我正在开发一个wordpress主题,现在我正在研究主题选项页面。我添加了一个带有"选择"方法的选项,为用户提供更改滑块 fx 的选项。现在。。。这是设置FX持续时间<?php echo get_option('wis_fx_speed'); ?>
并且工作正常的文本输入的输出!我的问题是<?php echo $fxSample ?>
不起作用。尝试了我知道和想象的一切(语法、顺序、将开关放在 jquery 脚本中等),搜索了网络但一无所获......你能帮我吗?提前感谢!
<?php
switch (get_option('wis_fx_slider')) {
case "opacity":
$fxSample = "opacity : 'toggle',";
break;
case "width":
$fxSample = "width : 'toggle',";
break;
case "opawidth":
$fxSample = "opacity : 'toggle', width : 'toggle',";
break;
case "blink":
$fxSample = "opacity : 'show',";
break;
}
?>
<script type="text/javascript">
jQuery(document).ready(function($){
$("#photo-rotator").tabs({fx:{<?php echo $fxSample ?>
duration: <?php echo get_option('wis_fx_speed'); ?> }}).tabs("rotate", 2000);
});
</script>
输出:
<
script type="text/javascript">
jQuery(document).ready(function($){
$("#photo-rotator").tabs({fx:{ duration: 3000 }}).tabs("rotate", 2000);
});
</script>
编辑如果我用收音机制作它,就可以工作。
当我需要将一些数据传递给 JavaScript 时,我发现先构建一个 PHP 数组,然后使用 json_encode
将其转换为 JavaScript 很有帮助。 这避免了许多潜在的问题:
<?php
$tab_options = array(
'duration' => get_option('wis_fx_speed'),
'fx' => array()
);
switch (get_option('wis_fx_slider')) {
case 'opacity':
$tab_options['fx']['opacity'] = 'toggle';
break;
case 'width':
$tab_options['fx']['width'] = 'toggle';
break;
case 'opawidth':
$tab_options['fx']['opacity'] = 'toggle';
$tab_options['fx']['width'] = 'toggle';
break;
case 'blink':
$tab_options['fx']['opacity'] = 'show';
break;
}
?>
<script type="text/javascript">
var tabOptions = <?php echo json_encode($tab_options); ?>;
jQuery(document).ready(function($) {
$('#photo-rotator').tabs(tabOptions).tabs('rotate', 2000);
});
</script>
好处:
- 更
- 干净的代码(更易于阅读)。
- 您不必担心在所有可能的情况下获得逗号、引号和其他语法的正确性。 例如,正如其他人所提到的,您没有
default
案例。 如果选项值无效,此方法至少会生成有效的 JavaScript。
要安全地将任何 PHP 值输出为 JavaScript 值,请使用 json_encode
。
...{fx:<?php echo json_encode($fxSample); ?>, duration: <?php echo json_encode(get_option("wis_fx_speed")); ?>}...
另请注意,您缺少,
,并且代码中有一个额外的}
。始终查看生成的结果以查找语法错误。
每个 php 行后都需要一个分号
...
$("#photo-rotator").tabs({fx:{<?php echo $fxSample; ?>
...
默认大小写值呢?
尝试调试执行
var_dump(get_option('wis_fx_slider')); var_dump($fxSample);
也许是范围问题?尝试定义
在$fxSample = "";
开始时,在切换之前
get_option('wis_fx_slider')
是否返回开关情况下的选项之一?
您尚未指定"默认值"$fxSample
因此将未定义。
<?php
switch (get_option('wis_fx_slider')) {
case "opacity":
$fxSample = "opacity : 'toggle',";
break;
case "width":
$fxSample = "width : 'toggle',";
break;
case "opawidth":
$fxSample = "opacity : 'toggle', width : 'toggle',";
break;
default: // blink or anything else
$fxSample = "opacity : 'show',";
}
?>
您的持续时间是字符串还是数字?如果它是一个字符串,你需要像
duration: '<?php echo get_option('wis_fx_speed'); ?>' }}).tabs("rotate", 2000);
查看源时会发生什么?PHP 是否正确布局了动态生成的 JavaScript?你能发布输出吗?
另外,格式化
<?php
switch (get_option('wis_fx_slider')) {
case "opacity":
$fxSample = "opacity : 'toggle',";
break;
case "width":
$fxSample = "width : 'toggle',";
break;
case "opawidth":
$fxSample = "opacity : 'toggle', width : 'toggle',";
break;
case "blink":
$fxSample = "opacity : 'show',";
break;
}
?>
<script type="text/javascript">
jQuery(document).ready(function($){
$("#photo-rotator").tabs({
fx: {
<?php echo $fxSample ?>
duration: <?php echo get_option('wis_fx_speed'); ?>
}
}).tabs("rotate", 2000);
});
</script>