首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JQuery自动完成-显示焦点上的完整菜单(来自WP短代码)

JQuery自动完成-显示焦点上的完整菜单(来自WP短代码)
EN

Stack Overflow用户
提问于 2015-03-20 09:19:19
回答 3查看 1.1K关注 0票数 0

我有一个工作的自动完成表。我希望它能显示所有的标签在下拉菜单上,只需一次点击,而不必键入。

堆栈交换对这个问题有很多很好的答案,我已经尝试过了,但都没有成功。我怀疑问题是整件事都是从Wordpress的短代码中加载的。如果可能的话,我想保持这种状态。有什么帮助吗?

我有两个使用自动完成的输入。

代码语言:javascript
运行
复制
    //create autocomplete compare box shortcode
function autocomparebox( $atts, $content = null ) {
   return '
   <link rel="stylesheet" href="//code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
   <script>
  $(function() {
    var blenders = [
      {
        value: "optimum-9400",
        label: "Optimum 9400",
        icon: "2015/02/optimum-9400-blender-60x60.jpg"
      },
      {
        value: "optimum-9200",
        label: "Optimum 9200",
        icon: "2015/02/optimum-9200-60x60.jpg"
      },
      {
        value: "optimum-8200",
        label: "Optimum 8200",
        icon: "2015/02/optimum-8200-60x60.jpg"
      }
    ];

//autocomplete Input 1

    $( "#blender" ).autocomplete({
      minLength: 0,
      source: blenders,
      focus: function( event, ui ) {

        $( "#blender" ).val( ui.item.label );
        return false;
      },
      select: function( event, ui ) {
        $( "#blender" ).val( ui.item.label );
        $( "#blender-id" ).val( ui.item.value );
        $( "#blender-icon" ).attr( "src", "http://bestblenderaustralia.com.au/wp-content/uploads/" + ui.item.icon );

        return false;
      }
    })

//Autocomplete Input 2

    $( "#blender2" ).autocomplete({
      minLength: 0,
      source: blenders,
      focus: function( event, ui ) {
        $( "#blender2" ).val( ui.item.label );
        return false;
      },
      select: function( event, ui ) {
        $( "#blender2" ).val( ui.item.label );
        $( "#blender-id2" ).val( ui.item.value );
        $( "#blender-icon2" ).attr( "src", "http://bestblenderaustralia.com.au/wp-content/uploads/" + ui.item.icon );

        return false;
      }
    })
    .autocomplete( "instance" )._renderItem = function( ul, item ) {
      return $( "<li>" )
        .append( "<a>" + item.label + "<br></a>" )
        .appendTo( ul );
    };
  });

// Focus on Input 1 on page load, focus on Input 2 after Input 1 option is selected
$(document).ready(function(){
    $("#blender").focus();
    $("#blender-icon").click(function(){
        $("#blender").focus();
    });
    $("#blender-icon2").click(function(){
        $("#blender2").focus();
    });
    $("#ui-id-1 li, #ui-id-1").click(function(){
        /* if ($("#blender2").val().length > 0) {
        $( "#compareform" ).submit();
        } else { */
        $("#blender2").focus();
        // }

    });
    $("#ui-id-2 li, #ui-id-2").click(function(){
        $("#blender").focus();
    });
});

//Values of selected items are passed to URL

function compareurl(){
    var url="http://bestblenderaustralia.com.au/" + document.getElementById("blender-id").value + "-vs-" + document.getElementById("blender-id2").value;
    location.href=url;
    return false;
    }

//Make sure both inputs are filled before submission

function validateForm() {
    var errorWarning = document.querySelector("#error-warning");
    var successLoading = document.querySelector("#success-loading");
    var x = document.forms["compareform"]["blender"].value;
    var y = document.forms["compareform"]["blender2"].value;
    if (x == null || x == ""|| y == null || y == "" || x == y) {
        errorWarning.style.display = "block";
        return false;
    } else {
    errorWarning.style.display = "none";
    successLoading.style.display = "block";
    return compareurl();
    }
}

  </script>
  <form id="compareform" onSubmit="return validateForm();">
   <div class="blender-compare-wrapper">
   <div id="blender-label"></div>
<img id="blender-icon" src="http://bestblenderaustralia.com.au/wp-content/themes/x-child-icon/img/blender-thumb-placeholder.png" class="ui-state-default" alt="">
<input name="blendera" id="blender" placeholder="Type a blender..." onfocus="this.placeholder = """>
<input type="hidden" id="blender-id">
<span class="versus"> VS. </span>
<img id="blender-icon2" src="http://bestblenderaustralia.com.au/wp-content/themes/x-child-icon/img/blender-thumb-placeholder.png" class="ui-state-default" alt="">
<input name="blenderb" id="blender2" placeholder="Type a blender..." onfocus="this.placeholder = """>
<input type="hidden" id="blender-id2">
<input type="submit" id="comparesubmit" value="Compare">
<p id="error-warning">Please choose two different blenders.</p>
<p id="success-loading">Loading results...</p>
</form>

</div>
   ';}

//Add the shortcode
add_shortcode('autocomparebox', 'autocomparebox');
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-20 09:41:40

这是不可能的,因为jquery自动完成只在文本块内任何值发生变化时才触发,但显示所有标签是可能的。

请看一下这个Stack,但是源代码中的变通方法会给您带来想要的结果

票数 0
EN

Stack Overflow用户

发布于 2015-03-22 01:55:55

谢谢你的帮助,我找到了一个解决办法,它就像绑定一个焦点事件来启动一个空的自动完成搜索一样简单。只要用输入的ID替换你的“你”,你就可以走了。

代码语言:javascript
运行
复制
$("#yourid").bind("focus", function(){
  if($(this).val()==""){ 
     $(this).autocomplete("search");
  } 
});
票数 0
EN

Stack Overflow用户

发布于 2016-01-25 14:17:02

使用选项minLength设置为0

代码语言:javascript
运行
复制
minLength: 0

希望这有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29163125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档