2011-03-25 57 views
2

我使用的是jQuery UI的自動補全插件,除了這個事實,當用戶點擊時,他們希望我分配給「select:」方法的值在該值之前觸發的領域改變了。因此,如果我在輸入字段中輸入「Foo」,然後單擊「Foo Bar」的自動完成匹配,則該函數將檢測到的值作爲鍵入的值(本例中爲「Foo」),而不是從自動填充中選擇的值名單。一旦函數觸發(在這種情況下,我只有一個警告框彈出w/this.value)輸入字段的值設置爲通過自動完成列表選擇的值。如果用戶選擇帶鍵盤的選項(箭頭鍵 - >選項卡),則僅在使用鼠標時纔會出現而不是jQuery UI Autocomplete

$(function() 
    { 
    var aEmps = 
    [ 
<?php 
echo $sEmps; 
?>  
    ]; 

    $("#slast").bind("keydown", function(event) { 
     if (event.keyCode === $.ui.keyCode.TAB && 
      $(this).data("autocomplete").menu.active) 
      { event.preventDefault(); } 
    }) 
    .autocomplete({ 
     source: aEmps, 
     select: function(event, ui) 
     { 
     var aName = $(this).val(); 
     alert(aName); 
     } 
    }) 
    }); 

由於大多數用戶都會有這樣使用他們的鼠標交互我必須找到一種方式來獲得射擊「選擇:」之前的設定值的功能。我相信我可以通過在自動完成之前在語句中添加一個條件來適應這一點,但我需要一些幫助來找到正確的語法。

回答

0

嘗試了多種方法後,我發現通過簡單地將回調函數綁定到關閉事件工作得很好。我添加了一些錯誤處理來捕獲未從列表中選擇的值,並且我關閉並正在運行!

下面是更新後的代碼:

$(function() 
    { 
    var aEmps = 
    [ 
<?php 
echo $sEmps; 
?>  
    ]; 

    $("#slast").bind("keydown", function(event) { 
     if (event.keyCode === $.ui.keyCode.TAB && 
      $(this).data("autocomplete").menu.active) 
      { event.preventDefault();} 
    }) 
    .autocomplete({ 
     source: aEmps, 
     close: function(event, ui) 
     { 
     alert(this.value); 
     }  
    }) 
    }); 
0

看看文檔,它看起來像選擇事件被觸發作爲選擇正在更新,而不是選擇更新後。嘗試使用更改事件而不是選擇,看看是否可以解決您的問題。

+0

不幸的是,更改事件是導致相反的問題在這個意義上,它不會火,直到用戶離開賽場,我需要它立即發生時,項被選中。我將回調函數綁定到關閉事件上,添加了一些錯誤處理邏輯(如果沒有輸入),並激活我關閉並運行! – 2011-03-25 22:43:38