2017-06-18 53 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

我试过你的建议从这个例子。我可以得到一个工作,但我无法让我的网址代码工作。我想知道你能否告诉我你会怎么做。我编辑了我的帖子以显示我尝试过的内容 –