2012-08-14 176 views
1

我有一個文本框綁定到jQuery UI的自動完成。當用戶從自動完成下拉列表中選擇一個選項時,JSON數據將用於使用來自遠程源的用戶詳細信息填充表單。jQuery UI自動完成等待搜索事件完成

我有綁定了以下功能的復位按鈕:

$('#btn_reset').on('click', function() { 
    $('#txt_name').autocomplete('search'); 
    $('.ui-menu-item').children().eq(0).click(); 
    return false; 
}); 

這可與少量的本地數據爲searchclick()完成之前被調用,但是與大量外部數據,search沒有及時完成,因此給我一個'item' is null or not an object錯誤。

我怎樣才能讓jQuery等到search完成後才致電click()

下面是一個使用本地數據源的工作小提琴:http://jsfiddle.net/3KTtT/3/

回答

1

解決方法是將函數綁定到自動完成的open事件,以檢查布爾變量以確定表單是否正在重置。

var reset = false; 
$(function() {  
    $('#txt_name').autocomplete({ 
     source: [{"label":"john smith","address":"19 Tree Lane"}], 
     delay: 0, 
     autoFocus: true, 
     open: function() { 
      if(reset){ 
       $('.ui-menu-item').children().eq(0).click(); 
       reset = false; 
      } 
     }, 
     select: function(event, ui) { 
      $('#txt_address').val(ui.item.address); 
     } 

    }); 

    $('#btn_reset').on('click', function() { 
     reset = true; 
     $('#txt_name').autocomplete('search'); 
     return false; 
    }); 

}); 

在這裏看到小提琴:http://jsfiddle.net/RVnkz/2/

+0

作爲答案張貼它很酷的東西的人。很高興你把事情解決了。它現在對遠程數據有效嗎? – jjay225 2012-08-14 15:04:28

+0

是啊工作完美:)試圖找到一個基本的遠程JSON數據源發佈我的原始小提琴但無濟於事... 再次感謝您的幫助btw – Elliott 2012-08-14 15:30:09

+0

好的工作Elliott :)你很歡迎嘿。 – jjay225 2012-08-15 07:07:27

0

我已經改變了你的榜樣,包括延時循環,它檢查是否有一個值,然後我打電話給你的點擊事件。應該把你在正確的軌道上:

jsFiddle Demo

如果你看一下下面的代碼,我有大於0,所以您可以測試代碼,但它應該是小於1

$('#btn_reset').on('click', function() { 
    $('#txt_name').autocomplete('search'); 
    if($('#txt_name').val().length>0) //THIS LINE 
    { 
     CheckValue(); 
    } 
    else 
    {      
    $('.ui-menu-item').children().eq(0).click(); 
    return false; 
    } 
}); 
+0

'CheckValue'似乎只之前'點擊添加一個一次性的1500延遲()'被激發:( – Elliott 2012-08-14 14:14:12

+0

是這就是正確的,因爲它發現有一個值爲「txt_name」。如果它沒有,你會看到CheckValue()被再次調用,如果「loaded」不等於1.檢查這個改變[jsFiddle](http://jsfiddle.net/jjay225/3KTtT/20 /) - 我已經設置「加載」等於0,並添加了一個console.log來顯示它被調用的次數。 – jjay225 2012-08-14 14:29:33

+0

感謝你對此的幫助,但我剛剛發現了一種完全不同的方式,在自動完成打開和「click()」之間沒有延遲。我會在第二個 – Elliott 2012-08-14 14:47:30