0

我有个问题要问你...

我有一个自动完成一些文本的函数,在选择时我想从函数返回 2 值......这是我的代码:

function autoComp(field, srt, file, act) {
      $( field ).autocomplete({
            minLength: srt,
            source: function( request, response ) {
                  $.ajax({
                        url: file,
                        type: 'post',
                        dataType: "json",         
                        data: {'azione':act, 'txt':request.term},
                        success: function(data) {
                              response( $.map( data.result, function( item ) {
                                    return { 
                                          label: item.text, 
                                          value: item.text,
                                          id:  item.id
                                    }
                              }));
                        }
                  });
            },
            select: function( event, ui ) { 
                  var obj = {};
                  obj[0] = ui.item.id;
                  obj[1] = ui.item.label;
                  return obj;
            }
      }); 
}

$(document).on('focus', '.farmCompl', function(){
      obj = autoComp(this, 3, 'search.php', 'music');
      if(obj){
            alert(obj[0]);
            alert(obj[1]);
      }
});

autoComp(...) 想成为一个通用函数,从我的项目中的许多地方调用......'field' 是要完成的选择器(例如'#text1'),srt 是 automplete 的开始。 ... Ajax 正常工作实际上自动完成提供了数据库选项...问题出在选项的选择上...。当我选择选项时,我希望自动完成将 id 和 label 的值返回给函数或调用 autoComp(...) 的事件我希望已经清楚 Bye

4

1 回答 1

0

jQuery 自动完成

与其尝试为 select 事件设置另一个侦听器,不如使用自动完成功能内置的侦听器。只需使用已在“选择”上调用的函数来执行您想要执行的操作。

我希望这有帮助。

    function autoComp(field, srt, file, act) {
          $( field ).autocomplete({
                minLength: srt,
                source: function( request, response ) {
                      $.ajax({
                            url: file,
                            type: 'post',
                            dataType: "json",         
                            data: {'azione':act, 'txt':request.term},
                            success: function(data) {
                                  response( $.map( data.result, function( item ) {
                                        return { 
                                              label: item.text, 
                                              value: item.text,
                                              id:  item.id
                                        }
                                  }));
                            }
                      });
                },
                select: function( event, ui ) { 
                    var obj = [];
                    obj[0] = ui.item.id;
                    obj[1] = ui.item.label;
                    alert(obj[0]);
                    alert(obj[1]);
                }
          }); 
    }

顺便说一句,如果你正在创建一个数组,你应该在声明和符号中使用方括号[0]..来获取值。如果要创建对象,请在声明中使用花括号并命名为“。” 参数来把事情弄出来。例如,您可以将对象声明为var obj = {},然后将值分配给它,obj.id = ui.item.id;等等。有关更多信息,请阅读数组和对象之间的区别

于 2013-06-20T22:20:20.500 回答