【问题标题】:Multiple Select - Chosen jQuery多选 - 选择 jQuery
【发布时间】:2012-05-05 13:22:51
【问题描述】:

我正在使用 Harvest Chosen jQuery 插件成功地在 Wordpress 网站上创建一个带有提交按钮的下拉单选列表。这被连接起来以显示给定分类中的所有术语,并允许用户选择一个术语,然后按下提交按钮以加载与所选术语相关的相应页面。

我现在正在尝试让插件与分类中的多个术语选择一起使用。我有选择工作,在前端用户可以选择多个术语,但我不知道如何提交多个选择。

我知道我的代码缺少某些内容,但我不知道需要修改什么以允许选择多个术语。

这是我目前所拥有的:

<form action="<?php bloginfo('url'); ?>">
<div>
<?php
function get_terms_dropdown($taxonomies, $args){
    $myterms = get_terms($taxonomies, $args);
    $output ="<select name='topics' class='chosen' style='width:500px' multiple='true'>";
    foreach($myterms as $term){
        $root_url = get_bloginfo('url');
        $term_taxonomy = $term->taxonomy;
        $term_slug = $term->slug;
        $term_name = $term->name;
        $link = $term_slug;
        $output .="<option value='".$link."'>".$term_name."</option>";

}
    $output .="</select>";
return $output;
}

$taxonomies = array('topics');
$args = array();
echo get_terms_dropdown($taxonomies, $args);

?>
<div><input type="submit" value="Filter" /></div>
</div>
</form>

通常,对于多项选择,“AND”查询的 URL 结构如下所示:

domain.com/?topics=topic1+topic2+topic3

“OR”查询的 OR 如下:

domain.com/?topics=topic1,topic2,topic3

现在获取这些选项中的任何一个都可以(我最终打算为 AND/OR 搜索添加一个选项)

任何帮助或指向正确方向以使这项工作正常进行都会很棒。

【问题讨论】:

  • 如果您使用的是 PHP,它可能需要一个查询字符串,例如 ?topics[]=topic1&amp;topics[]=topic2&amp;topics[]=topic3&amp;mode=AND。让我知道这是否可以。
  • 嗨,萨尔曼。如果我从多选下拉列表中仅选择一个值,则提交工作正常,第一个“?”附加到 url。问题来自多个选择,其中提交只需选择最后一个选择的值,然后加载该页面......
  • 如果我从多个下拉列表中选择一个值,提交工作正常,第一个“?”被添加到 url。问题来自多个选择,其中提交选择最后一个选择的值,并加载该页面...如果我编辑 $output .=" ";这将创建如下网址: domain.com/?topics=letterTOPIC1&topics=letterTOPIC2 我希望可以使用 str_replace 进行更改,但是 & 、 + / 等是 urlencoded 并且我找不到 str_replace 它们的方法。
  • 我强烈推荐使用 Select2 而不是 Chosen。选择从未真正完成。这是一个很好的开始...... Select2 更加完整,错误更少,得到开发,并支持响应式设计等现代概念。它的工作原理基本相同,因此转换非常容易。 ivaynberg.github.com/select2

标签: php wordpress forms jquery-chosen


【解决方案1】:

当您提交表单时,您可以使用 JavaScript 构建 URL 并使用以下内容更改页面:

$('form').submit( function() {
    var selectArray = $('select').val();
    var newURL = "http://domain.com/?topics=";
    for (var i = 0; i < selectArray.length; i++) {
        if ( 1 != 0 ) {
            newURL += "+";
        }
        newURL += selectArray[i];
    }
    window.location = newURL;
});

故障:$('form').submit( function() { [...] }); 在提交表单时被触发。您可能希望使用您的表单唯一的类 $('form.yourClass') 或 ID $('form#yourID') 来限定它。

$('select').val() 将为一个 selet 元素返回一个包含选定值的数组。它应该以与具有类$('select.yourClass') 或ID $('select#yourID') 的表单相同的方式进行限定。 JavaScript 遍历数组并将每个值附加到 http://domain.com/?topics= 的根 URL,每个值之间有一个 +。完成后,用户将被重定向到新 URL。

【讨论】:

  • 嗨,马修 - 你能详细说明我将如何实现这一点吗?恐怕我的 Javascript 技能很薄弱......
  • 那是 jQuery。 '$('form').submit( function() { } )' 将在提交页面上的任何表单时被触发。您可以使用$('form#myFormID') 之类的ID 或$('form.myFormClass') 之类的类来限定它。 $('select').val() 将返回选择元素的值。你可以用同样的方法来限定它以获得正确的。我将在我的示例中添加更多细节。
猜你喜欢
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多