2017-06-18 59 views
0

我正在寫一個插件來執行堆棧溢出等標籤。現在我已經得到了插件或多或少的工作,除了我還沒有解決的一個問題。我要麼從對象或網址中獲取我的源代碼。當然不是在同一時間。所以我想切換它們,但是不能在自動完成插件中放置if語句,並且我不確定在運行自動完成之前是否可以構建源代碼行。如何在jQuery UI自動完成上切換源代碼

所以我要麼我的源被從settings.avalableTags或從我下面的url代碼。有沒有什麼方法可以在自動完成之前或內部切換這些。

這是我的代碼。

$(idtag).find('input').autocomplete({ 
    //source: settings.availableTags, 
    source: function(request, response) { 
    $.ajax({ 
     url: settings.url, 
     data: $.extend(settings.data, { 
     'term': $(idtag).find('input').val() 
     }), 
     dataType: 'JSON', 
     type: "POST", 
     success: function(data) { 
     response(data); 
     } 
    }); 
    }, 
    minLength: 2, 
    select: function(event, ui) { 
    id = $(this).parent().parent().attr('id'); 
    idtag = "#" + id; 
    $(idtag).find('input').val(ui.item.label); 
    base.addTag(); 
    }, 
    change: function(event, ui) { 
    if (!ui.item) { 
     $(this).val(''); 
    } 
    } 
}).keydown(function(e) { 
    if (e.keyCode === 13 || e.keyCode === 188) { 
    $(this).blur().val(''); 
    }; 
}); 

我試過穆罕默德的建議。現在,如果我設置了availableTags(false),它將起作用,但在更改爲true時不起作用。所以它沒有正確運行我的功能。我相信這是因爲我不能把在張貼如

var availableTags =function (condition){ 
    if(condition){ 
     return settings.availableTags 
    }else{ 
     $.ajax({ url: settings.url, 
     data: $.extend(settings.data,{'term': $(idtag).find('input').val()}), 
     dataType: 'JSON', 
     type: "POST", 
     success: function(data){ 
      return response(data); 
     } 
    }); 
     } 
    } 
} 

回答

0

好吧,我終於有了可行的答案。

var availableTags =function (request, response){ 
    if(settings.url==""){ 
     response($.ui.autocomplete.filter(settings.availableTags, request.term)); 
    }else{ 
     $.ajax({ url: settings.url, 
     data: $.extend(settings.data,{'term': $(idtag).find('input').val()}), 
     dataType: 'JSON', 
     type: "POST", 
     success: function(data){response(data);} 
     }); 
    } 
} 

,然後在它是這樣

base.autocomplete= function(){ 
    $(idtag).find('input').autocomplete({ 
     source: availableTags, 
     minLength: 2, 
     select: function(event,ui){ 
     id=$(this).parent().parent().attr('id'); 
     idtag="#"+id; 
     $(idtag).find('input').val(ui.item.label); 
     base.addTag(); 
},snip... 

基本上如果我發送一個網址到它運行Ajax代碼的插件,但自動完成,如果我沒有在URL中發送它默認爲標籤。 例如,如果我在此發出,它將運行在本地標籤

$('[data-asitag]').asiTag({availableTags:[{label:"Action",value:"1"},{label:"Apple",value:"2"},{label:"Aferburner",value:"3"}],force:false}); 

,但如果我在這個

$('[data-asitag2]').asiTag({ 
     url: 'ajax/ajax.php',  
     force:true}); 

送它會在網址發送。 我花了好幾個小時纔得到這個工作,所以我希望它可以幫助別人。

0

所需的請求/效應初探您可以傳遞一個函數的

source: functionName() 

所以,你可以把你想要包括的任何業務

if()//Statement 

看一看Here

希望這有助於

+0

我試過你的建議從這個例子。我可以得到一個工作,但我無法讓我的網址代碼工作。我想知道你能否告訴我你會怎麼做。我編輯了我的帖子以顯示我嘗試過的內容 –