PHP inside Jquery


PHP inside Jquery

我正在开发一个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>