如何将更改事件上的javascript选择框替换为表单提交操作?

时间:2016-08-31 作者:JCM

我有一个小问题,可能有一个非常简单的解决方法。我一直在使用wp_get_archives() 函数生成下拉选择窗体。请参见下面的完整代码:

<form id="side-arch">
     <select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
          <option value=""><?php echo esc_attr( __( \'Select Month\' ) ); ?></option> 
          <?php wp_get_archives( array( \'type\' => \'monthly\', \'format\' => \'option\', \'show_post_count\' => 1 ) ); ?>
     </select>
     <input type="submit" value="Go" id="submit" />
</form>
我想使用submit按钮,而不是onchange事件来执行操作。显然,我应该做的是删除onchange 元素并添加表单操作。我尝试过将其格式化,就像我的功能类别下拉列表一样,通过这样做可以实现:

<form id="side-arch" action="<?php echo esc_url( home_url( \'/\' ) ); ?>" method="get">
     <select name="archive-dropdown">
          <option value=""><?php echo esc_attr( __( \'Select Month\' ) ); ?></option>
          <?php wp_get_archives( array( \'type\' => \'monthly\', \'format\' => \'option\', \'show_post_count\' => 1 ) ); ?>
     </select>
     <input type="submit" value="Go" id="submit" />
</form>
然而,这不起作用。我猜表单操作中的url有问题,因为它只是将我发送到网站的主页。

有没有人对如何将此切换到使用Go 按钮

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

它不起作用,因为:

您正在重定向回家$_GET 变量,因此存档链接只是附加到您的主页url中,您需要添加一个函数来侦听该链接$_GET 变量

只需将此添加到functions.php 文件

add_action( \'template_redirect\', \'wpse_archive_select\' );
function wpse_archive_select(){

  if( isset( $_GET[ \'archive-dropdown\' ] ) ){
    die( wp_safe_redirect( $_GET[ \'archive-dropdown\' ] ) );
  }
}