2011-06-01 84 views
9

我正在使用jquery autocomplete combobox 并且一切正常。但我也想通过JavaScript设置具体的值,如$("#value").val("somevalue"),它设置为选择元素,但没有改变输入元素与自动完成。将值设置为jquery自动完成组合框

当然,我可以直接选择这个输入并设置数值,但是这样做还有其他方法吗?我尝试设置绑定到this.elementthis.element.bind("change", function(){alert(1)})但它没有影响。我不知道为什么。

编辑

我发现这种情况下的解决方法。但我不喜欢它。我已经添加下面的代码_create功能ui.combobox

this.element.bind("change", function() { 
    input.val($(select).find("option:selected").text()); 
}); 

当我需要改变我的值可以使用$("#selector").val("specificvalue").trigger("change");

+0

告诉我们一些你的HTML的.. – 2011-06-01 07:31:31

+1

什么样的HTML? 它看起来像 xandox 2011-06-01 07:55:31

回答

25

this demo你在找什么?

链接将jQuery UI自动完成的值设置为Java。焦点留在输入上,以便正常的键盘事件可以用于导航选项。

编辑:如何附加其它功能的组合框是这样的:

autocomplete : function(value) { 
    this.element.val(value); 
    this.input.val(value); 
} 

,并与值调用它,你要设置:

$('#combobox').combobox('autocomplete', 'Java'); 

Updated demo

我找不到任何可用的现有功能来做你想做的事,但这似乎很适合我。希望它更接近你所需要的行为。

+0

是的。这是正确的行为,但不完整。你不应该忘记调用$(“#combobox”)。val(“Java”)。看看我的编辑问题。我找到了解决方法。但我不应该忘记呼叫触发功能,它不舒服。 – xandox 2011-06-01 10:17:15

+1

好吧,我想我明白了。您正在寻找一个不显眼的解决方案。我添加了一个可能更好的新演示。 – andyb 2011-06-01 10:54:08

+0

你好。这是我寻找的。谢谢你很多。 – xandox 2011-06-01 11:34:26

-1

http://jsfiddle.net/nhJDd/

$(".document").ready(function(){ 
    $("select option:eq(1)").val("someNewVal"); 
    $("select option:eq(1)").text("Another Val"); 
    $("select option:eq(1)").attr('selected', 'selected'); 

}); 

这里是一个工作例子, jquery,我假设你想改变一个选择的值,改变它的文本面,并让它在页面加载时被选中?

尝试2:

这里还有一个小提琴:http://jsfiddle.net/HafLW/1/,你的意思是你选择一个选项,那么你要的是价值附加到一个输入区域的自动完成?

$(".document").ready(function(){ 
    someString = "this,that"; 
     $("input").autocomplete({source: someString.split(",")}); 

    $("select").change(function(){ 
     alert($(this).val()+" appended"); 
someString = someString+","+$(this).val(); 
     $("input").autocomplete({source: someString.split(",")}); 


    }); 
}); 
+0

:)实际上没有。 我想跟随。如果我在选择选项中已经存在val(“somevalue”)(“somevalue”),输入(添加了自动完成的元素)文本也会改变 – xandox 2011-06-01 08:37:31

+0

ah ok,这样就更清晰了:) – John 2011-06-01 09:16:22

+0

: )** user763228 **看看**和yb的回答** 他几乎是正确的。 – xandox 2011-06-01 10:20:57

4

我管理一个快速和肮脏的方式来设置值。但是,您确实需要知道要在下拉菜单中显示的项目的价值和文字。

var myValue = foo; // value that you want selected 
var myText = bar; // text that you want to display 
// You first need to set the value of the (hidden) select list 
$('#myCombo').val(myValue); 
// ...then you need to set the display text of the actual autocomplete box. 
$('#myCombo').siblings('.ui-combobox').find('.ui-autocomplete-input').val(myText); 
1

我真的很喜欢andyb没有,但我需要它做的多一点左右事件处理能够处理触发change事件,因为“选择”按下回车键或失去焦点时不处理在输入上(点击标签或鼠标点击)。

因此,采用什么andyb做的魅力以及jQuery的自动完成脚本的最新版本,我创建了以下解决方案:DEMO

  • 输入:]选择,如果第一项菜单可见
  • 聚焦丢失:部分匹配触发没有找到消息,并清除条目(jQuery UI的),但完全输入回答“选择”这个值(不区分sensative)

如何更改方法可以点移动平均滤波器:

$("#combobox").combobox({ 
    selected: function (event, ui) { 
     $("#output").text("Selected Event >>> " + $("#combobox").val()); 
    } 
}) 
.change(function (e) { 
    $("#output").text("Change Event >>> " + $("#combobox").val()); 
}); 

希望这有助于其他人谁需要额外的变化事件的功能,“选择”为空白,以弥补叶开放。

3

@andyb, 我想重写:

autocomplete: function (value) { 
     this.element.val(value); 

     var selected = this.element.children(":selected"), 
       value = selected.val() ? selected.text() : ""; 
     this.input.val(value); 
    } 
+0

如果你解释你的代码,这将是一个更好的答案。 – 2013-10-07 22:48:39

+1

var selected = this.element.children(“:selected”); value = selected.val()? selected.text():“”; //它将获得为输入值选择的选项的文本值,而不是选项的值 – nthaih 2013-10-13 14:57:49