使用菜单<li>链接或onClick设置变量

时间:2017-01-27 作者:David Cook

我为一个按周和日显示阵列数据的页面构建了一个菜单。菜单中列出了第1天|第2天|第3天的链接。。。直到第7天。然后,我有一个变量$day\\u编号,用于从数组中选择一天行以在页面上显示内容。我可以通过更改$day\\u数值手动更改页面上显示的日期。我想设置菜单以在单击时更新变量。

我可以为每个菜单项设置onClick函数调用,但在函数之外设置变量$day\\u时遇到了问题。由于我是从调用函数,因此无法使用返回结果。

这是当前的菜单结构。除了使用onClick函数调用之外,我还可以选择其他选项。

<ul class="topnav" id="myTopnav">
    <li class="dayLink" id="day_1"><a href="#" onClick="setDay(\'Day1\');">Day 1</a></li>
    <li class="dayLink" id="day_2"><a href="#" onClick="setDay(\'Day2\');">Day 2</a></li>
    <li class="dayLink" id="day_3"><a href="#" onClick="setDay(\'Day3\');">Day 3</a></li>
    <li class="dayLink" id="day_4"><a href="#" onClick="setDay(\'Day4\');">Day 4</a></li>
    <li class="dayLink" id="day_5"><a href="#" onClick="setDay(\'Day5\');">Day 5</a></li>
    <li class="dayLink" id="day_6"><a href="#" onClick="setDay(\'Day6\');">Day 6</a></li>
    <li class="dayLink" id="day_7"><a href="#" onClick="setDay(\'Day7\');">Day 7</a></li>
</ul>
下面是onClick运行的函数。它传递setDay值,以便我知道单击链接的日期。这很好,但我需要让click事件在函数外设置$day\\u number的值。

<script type="text/javascript">
function setDay($day)
{
    console.log($day);
}
</script>

1 个回复
最合适的回答,由SO网友:BlueSuiter 整理而成

通过这种方式,您可以使用ajax传递值,您可以在php脚本中从$\\u POST获取值

jQuery(document).ready(function(){
  jQuery(\'.dayLink a\').click(function(){
     var li_id = jQuery(this).closest(\'.dayLink\').attr(\'id\');
     jQuery.ajax({
        url: \'url_to_php_script\',
        data: {dayValue: li_id,action:call_to_ajax},
        method: \'POST\',
        success: function(res){
            console.log(res);
        }
     })
  });
});
右括号出现故障。

<?php
if(isset($_GET[\'li_id\'])){
    $test = $_GET[\'li_id\'];
    echo $test;
    }
?>
添加了新的php脚本以响应POST方法传递的值。

下面是php文件中的整个脚本。

<script type="text/javascript">
jQuery(document).ready(function(){
  jQuery(\'.dayLink a\').click(function(){
  var li_id = jQuery(this).closest(\'.dayLink\').attr(\'id\');
  jQuery.ajax({
    url: \'https://grat-itudefitness/wp-content/themes/divi-child-gratitudefitness/includes/b2p_program_navigation.php\',
    data: {dayValue: li_id},
    method: \'POST\',
    success: function(res){
      console.log(res);
      }
    })
  });
});
</script>

<?php
if(isset($_GET[\'li_id\'])){
  $test = $_GET[\'li_id\'];
  echo $test;
  }
?>

<!-- Exercise Menu -->
<ul class="topnav" id="myTopnav">
  <li class="dayLink" id="day_1"><a href="javascript:void(0)">Day 1</a></li>
  <li class="dayLink" id="day_2"><a href="javascript:void(0)">Day 2</a></li>       
  <li class="dayLink" id="day_3"><a href="javascript:void(0)">Day 3</a></li>
  <li class="dayLink" id="day_4"><a href="javascript:void(0)">Day 4</a></li>
  <li class="dayLink" id="day_5"><a href="javascript:void(0)">Day 5</a></li>
  <li class="dayLink" id="day_6"><a href="javascript:void(0)">Day 6</a></li>
  <li class="dayLink" id="day_7"><a href="javascript:void(0)">Day 7</a></li>
</ul>
您需要的代码::

**要保存在模板文件中的代码**

<?php
  $actionName = \'callMyAjax\';
  $nonce = wp_create_nonce($actionName);
?>
<script type="text/javascript">
jQuery(document).ready(function(){
  jQuery(\'.dayLink a\').click(function(){
  var li_id = jQuery(this).closest(\'.dayLink\').attr(\'id\');
  jQuery.ajax({
    url: \'https://example.com/wp-admin/admin-ajax.php\',
    data: {dayValue: li_id,action:<?php echo $actionName; ?>,ajaxOrigin:<?php echo $nonce; ?>},
    method: \'POST\',
    success: function(res){
      console.log(res);
      }
    })
  });
});
</script>
**保留在函数中的代码**

<?php
function myAjaxHanlder()
{
  if(isset($_POST[\'ajaxOrigin\']) && wp_verify_nonce($_POST[\'ajaxOrigin\'], \'callMyAjax\')){
    if(isset($_POST[\'li_id\'])){
      $test = $_POST[\'li_id\'];
      echo $test;
    }
  }
}
add_action(\'wp_ajax_callMyAjax\', \'myAjaxHanlder\' );
add_action(\'wp_ajax_nopriv_callMyAjax\', \'myAjaxHanlder\' );
?>

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请