0

我正在使用此组合框的代码。

我认为通过注释掉这部分我会很巧妙,这将允许文本输入超出不匹配的查询。

/*Commented out to allow user input
if (!valid) {
    remove invalid value, as it didn't match anything
    $(this).val("");
    select.val("");
    input.data("autocomplete").term = "";
    return false;
}*/

我的聪明才智遇到的问题是在 JS 中验证表单时无法获得此值。关于我如何做到这一点的任何想法?

4

5 回答 5

2

自发布并回答此问题以来,已修改 JQuery UI 组合框的代码。问题中提供的链接仍然有效,但那里的代码与该线程中讨论的代码不同。

这是对新组合框代码(截至 2015 年 9 月 2 日)的修复,其工作方式与 Peter 的方法类似。

先去掉这个块,防止自定义值被删除:

this.input
  .val( "" )
  .attr( "title", value + " didn't match any item" )
  .tooltip( "open" );
this.element.val( "" );
this._delay(function() {
  this.input.tooltip( "close" ).attr( "title", "" );
}, 2500 );
this.input.autocomplete( "instance" ).term = "";

替换为此块以将自定义值添加为选择选项并将其设置为当前值:

this.element.append('<option>' + this.input.val() + '</option>'); //Add the new option
this.element.val(this.input.val()); //select the new option
于 2015-09-08T13:51:03.520 回答
1

为什么不像这样将“无效”输入添加到选择元素的末尾

if (!valid) {
    select.append('<option>' + $(element).val() + '</option>'); //Add the new option
    select.val($(element).val()); //select the new option
} 

仅当您在选择中使用纯文本值时,这才有意义

我在寻找答案时找到了你的代码,但在阅读了你的答案后意识到我必须做什么。

于 2014-05-07T22:55:38.023 回答
1

所以我解决了这个问题。我创建了一个隐藏变量:

<input id="EnterYourOwnValue" type="hidden" value="Enter New... or Select" />

然后我编辑了 jquery 组合的一部分以保存输入到 EnterYourOwnValue 中的值:

                            if (!valid) {
                                $("#EnterYourOwnValue").val($(this).val());
                                /*Commented out to allow user input
                                //remove invalid value, as it didn't match anything
                                $(this).val("");
                                select.val("");
                                input.data("autocomplete").term = "";
                                return false;
                                */
                            }

或将选定的值保存到其中:

                        select: function (event, ui) {
                            $("#EnterYourOwnValue").val(ui.item.option.value);
                        ui.item.option.selected = true;
                        self._trigger("selected", event, {
                            item: ui.item.option
                        });

现在,自动完成组合框被黑客攻击为一个选择或在一个框中输入您自己的值!

于 2012-07-19T14:42:46.120 回答
0

这就是我在使用多个组合框时所做的

当然,我也必须进行隐藏输入。

var thisinput = this.element.attr("name");
var value = this.input.val();

    if(thisinput == "YourComboBoxName"){
    $("#EnterYourOwnValue").val(value);
    }
于 2014-10-22T00:24:17.163 回答
0

花了很长时间试图让它与多个组合框一起工作。

为了让这篇文章与多个组合框一起工作,我必须添加这个:

if($(select).attr('name') == YourComboBoxName) $("#EnterYourOwnValue").val($(this).val())

于 2012-12-20T04:29:52.997 回答