2011-06-01 60 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