Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQueryUI自动完成是";";关于初始值;不按预期响应箭头键_Jquery_Jquery Ui_Autocomplete_Jquery Ui Autocomplete_Usability - Fatal编程技术网

jQueryUI自动完成是";";关于初始值;不按预期响应箭头键

jQueryUI自动完成是";";关于初始值;不按预期响应箭头键,jquery,jquery-ui,autocomplete,jquery-ui-autocomplete,usability,Jquery,Jquery Ui,Autocomplete,Jquery Ui Autocomplete,Usability,我有使用自动完成的元素,它们也有初始值。 问题是,我的用户希望单击输入并使用向上/向下箭头键来更改这些值——就像没有初始值时自动完成允许的那样(也就像行为一样) HTML: <label> Input with 4 possible values: <input type="text" value="green" id="tstInp"> </label> $("#tstInp").autocomplete ( { delay: 0,

我有使用自动完成的
元素,它们也有初始值。
问题是,我的用户希望单击输入并使用向上/向下箭头键来更改这些值——就像没有初始值时自动完成允许的那样(也就像
行为一样)

HTML:

<label>
    Input with 4 possible values:
    <input type="text" value="green" id="tstInp">
</label>
$("#tstInp").autocomplete ( {
    delay: 0,
    minLength: 0,
    source: ["red", "green", "blue", "yellow"]
} )
jsFiddle:

<label>
    Input with 4 possible values:
    <input type="text" value="green" id="tstInp">
</label>
$("#tstInp").autocomplete ( {
    delay: 0,
    minLength: 0,
    source: ["red", "green", "blue", "yellow"]
} )

要复制问题

  • 加载小提琴并聚焦输入
  • 现在使用向上和向下箭头键尝试更改该值
  • 您将只看到初始值和仅包含初始值的下拉列表
  • 现在从输入中删除该值并重复步骤2
  • 您将能够循环使用所有可能的值,就像使用
    一样。而且,您可以通过键入字母来筛选值
  • 理想情况下,在步骤3中,箭头键不仅会循环显示可能的值,而且会从最初输入的值开始(
    green
    ,在本例中)。例如:


    预期行为与autocomplete当前所做的唯一区别在于,在输入聚焦后,初始的上/下箭头键应立即显示所有可能的值——理想情况下,初始值已在下拉菜单中聚焦

    如何让autocomplete按预期响应向上/向下箭头



    我使用的是jQuery 2.1.0和jQuery UI 1.11.1。

    它的行为应该是这样的,当您输入一个值时,如果该值在列表中没有匹配项,它将不显示任何内容,如果它有一个或多个匹配项,它将显示那些匹配的值。 我希望如此 会帮助你理解

    source: ["red", "green", "greenish", "blue", "yellow"]
    

    传递源选项的函数,不过滤结果

    var src = ['red', 'green', 'blue', 'yellow'];
    
    $("#tstInp").autocomplete({
        source: function (request, response) {
            response(src);
        }
    });
    

    请参见以下一种可能的解决方案:

    • 使用向下箭头键打开下拉列表时显示所有值
    • 否则返回默认行为
    var source=[“红色”、“绿色”、“蓝色”、“黄色”],
    showall;
    $(“#自动完成1”)。自动完成({
    最小长度:0,
    搜索:功能(事件、用户界面){
    showall=event.which==40;
    },
    来源:功能(请求、响应){
    响应(showall?源:$.ui.autocomplete.filter(源、请求、术语));
    }
    });
    


    原始答复:

    通过(i)设置(ii)调用方法并传递空字符串,可以打开下拉列表并手动显示所有值(例如,单击按钮)。您可以在文本框的焦点事件中查看此行为,或为此添加专用按钮


    在小提琴上:(1)擦除输入,(2)使用箭头键向下滚动至
    绿色。请注意,输入为绿色
    ,并且仍然列出所有值(尚未过滤)。这就是我们测试的用户期望该控件的行为方式(它是组合框的一部分)。我该怎么做?很抱歉,这有点让人困惑,当你擦除输入,上下箭头键显示选项时,是否应该在上下箭头键上应用过滤?即使你没有选择它,过滤也应该正常工作——除了初始焦点,它看起来像。上下键应在过滤后的可用选项之间滚动,但只有新的(重新)输入焦点,在按下任何键之前,过滤应忽略输入值。我想从给定的角度来看,这个答案是正确的。看起来我必须扩展这个控件以使其对用户友好?那么为什么不使用combobox呢?我想这就是你要找的?是吗?好的,如果用户在步骤4中输入
    bl
    ,会发生什么?它应该显示所有的值还是只显示
    蓝色
    ?@SalmanA,只显示
    蓝色
    。(一旦输入被清除,该部分就能正常工作。)谢谢。它确实解决了最初的箭头键问题,但它打破了过滤。清除输入后,它仍然需要作为标准的自动完成。这确实给了我一个尝试的想法。是的。看来我得开一个状态机来对焦、搜索和按键。如果在接下来的24小时内没有更好的表现,这就是答案。谢谢,我想了一下。下拉菜单在各种事件上打开,例如(i)用户键入时(ii)单击向下箭头。您可以捕获后一个事件并覆盖搜索行为以显示所有值;否则使用默认行为。关闭。除了一种情况(选择、模糊、聚焦、{oops})外,其他情况都适用(ETA:可能不适用,我使用向上箭头进行测试)。你有没有理由降低jQ和jQUI的速度?无论如何,我需要考虑一下这个问题。(I)你必须按下向下箭头(这是激活空自动完成的方式)(ii)没有特别的原因;请注意,我之所以选择这个答案,是因为它是目前最好的解决方案,而我的实际代码在分类上是相似的。(计划在第二天或第二天发布——可能只是把它附加到这个答案中)。但此答案确实满足所有要求,因此请不要编辑问题以匹配答案。;)