jQuery 자동완성 예제 소개

小云云
풀어 주다: 2018-01-01 10:27:23
원래의
3367명이 탐색했습니다.

이 글에서는 주로 jQuery Autocomplete에 대한 소개를 소개합니다. jQuery UI Autocomplete는 제가 사용해본 것 중 가장 강력하고 유연한 Autocomplete 구성 요소이며, ajax를 통해 요청된 Array/JSON을 지원합니다. 배열, JSONP 및 함수(가장 유연한)가 데이터를 얻는 데 사용됩니다.

jQuery UI Autocomplete는 제가 사용해 본 자동 완성 기능 중 가장 강력하고 유연한 자동 완성 구성 요소입니다. 이는 ajax, JSONP 및 Function을 통해 요청된 배열/JSON 배열을 지원합니다. ) 및 기타 데이터 획득 방법.

지원되는 데이터 소스

jQuery UI 자동 완성은 주로 문자열 배열과 JSON이라는 두 가지 데이터 형식을 지원합니다.

다음과 같이 일반 배열 형식에는 특별한 것이 없습니다.

["bjpowernode","动力节点","李四"]
로그인 후 복사

JSON 형식의 배열의 경우 다음과 같이 레이블 및 값 속성이 있어야 합니다.

[{label: "动力节点", value: "bjpowernode"}, {label: "李四", value: "李四"}]
로그인 후 복사

레이블 속성은 다음과 같이 사용됩니다. 자동 완성 팝업 메뉴에 표시됩니다. value 속성은 선택 후 텍스트 상자에 할당된 값입니다.

속성 중 하나가 지정되지 않으면 다음과 같이 다른 속성으로 대체됩니다(즉, value와 label의 값이 동일함).

[{label: "bjpowernode"}, {label: "李四"}]
[{value: "bjpowernode"}, {value: "李四"}]
로그인 후 복사

label과 value 중 어느 것도 지정되지 않으면 속성을 지정할 수 없습니다. 자동 완성 프롬프트에 사용됩니다.

또한 서버에서 출력되는 JSON 키는 다음과 같이 큰따옴표로 묶어야 합니다.

[{"label": "动力节点", "value": "bjpowernode"}, {"label": "李四", "value": "李四"}]
로그인 후 복사

그렇지 않으면 파서 오류가 발생할 수 있습니다.

주요 매개변수

jQuery UI Autocomplete에서 일반적으로 사용되는 매개변수는 다음과 같습니다.

1.Source: 데이터 소스를 지정하는 데 사용되며 유형은 String, Array, Function

  1. String: 서버 측에 사용됩니다. ajax 요청 주소, 배열/JSON 형식을 반환합니다

  2. Array: 문자열 배열 또는 JSON 배열

  3. Function(request, response): request.term, response([Array])를 통해 입력 값을 가져와서 표시합니다. data; (JSONP는 이런 식입니다)

2.minLength: 입력 상자의 문자열 길이가 minLength에 도달하면 Autocomplete를 활성화합니다.

3.autoFocus: 자동 완성 선택 메뉴가 나타나면 자동으로 첫 번째 항목을 선택합니다

4.지연: 즉, 자동 완성 활성화를 지연하는 데 몇 밀리초가 걸리는지입니다.

덜 일반적으로 사용되는 기타 항목은 여기에 나열되지 않습니다.

Usage

페이지에 다음 입력 상자가 있다고 가정합니다.

<input type="text" id="autocomp" />
로그인 후 복사

AJAX request
는 다음과 같이 소스를 서버측 주소로 지정하여 구현됩니다.

$("#autocomp").autocomplete({
  source: "remote.ashx",
  minLength: 2
});
로그인 후 복사

그런 다음 수신합니다. 서버 측에서 해당 결과를 출력합니다. 기본적으로 전달되는 매개변수 이름은 용어입니다.

public void ProcessRequest(HttpContext context) {   
// 查询的参数名称默认为term   
string query = context.Request.QueryString["term"];   
context.Response.ContentType = "text/javascript";   
//输出字符串数组 或者 JSON 数组   
context.Response.Write("[{\"label\":\"动力节点\",\"value\":\"bjpowernode\"},{\"label\":\"李四\",\"value\":\"李四\"}]"); }
로그인 후 복사

Local Array/JSON array

// 本地字符串数组
var availableTags = [
  "C#",
  "C++",
  "Java",
  "JavaScript",
  "ASP",
  "ASP.NET",
  "JSP",
  "PHP",
  "Python",
  "Ruby"
];
$("#local1").autocomplete({
  source: availableTags
});
// 本地json数组
var availableTagsJSON = [
  { label: "C# Language", value: "C#" },
  { label: "C++ Language", value: "C++" },
  { label: "Java Language", value: "Java" },
  { label: "JavaScript Language", value: "JavaScript" },
  { label: "ASP.NET", value: "ASP.NET" },
  { label: "JSP", value: "JSP" },
  { label: "PHP", value: "PHP" },
  { label: "Python", value: "Python" },
  { label: "Ruby", value: "Ruby" }
];
$("#local2").autocomplete({
  source: availableTagsJSON
});
로그인 후 복사

Callback Function method

는 소스를 다음과 같이 지정하여 사용자 정의 데이터를 획득합니다. 사용자 정의 함수에는 주로 2개의 매개변수(요청, 응답)가 있으며 각각 입력 값을 얻고 결과를 표시하는 데 사용됩니다.

데이터를 얻기 위한 로컬 배열 방법(Sina Weibo 로그인 모방)

var hosts = ["gmail.com", "live.com", "hotmail.com", "yahoo.com", "bjpowernode.com", "火星.com", "李四.com"];
$("#email1").autocomplete({
  autoFocus: true,
  source: function(request, response) {
    var term = request.term, //request.term为输入的字符串
      ix = term.indexOf("@"),
      name = term, // 用户名
      host = "", // 域名
      result = []; // 结果
 
    result.push(term);
    // result.push({ label: term, value: term }); // json格式
    if (ix > -1) {
      name = term.slice(0, ix);
      host = term.slice(ix + 1);
    }
    if (name) {
      var findedHosts = (host ? $.grep(hosts, function(value) {
        return value.indexOf(host) > -1;
      }) : hosts),
      findedResults = $.map(findedHosts, function(value) {
        return name + "@" + value; //返回字符串格式
        // return { label: name + " @ " + value, value: name + "@" + value }; // json格式
      });
      result = result.concat($.makeArray(findedResults));
    }
    response(result);//呈现结果
  }
});
로그인 후 복사

JSONP 방법 data

공식 DEMO에서 직접 가져온 것입니다. 원격 서버에 ajax 요청을 보낸 다음 반환 결과를 처리하고 마지막으로 응답을 통해 표시합니다.

$("#jsonp").autocomplete({
  source: function(request, response) {
    $.ajax({
      url: "http://ws.geonames.org/searchJSON",
      dataType: "jsonp",
      data: {
        featureClass: "P",
        style: "full",
        maxRows: 12,
        name_startsWith: request.term
      },
      success: function(data) {
        response($.map(data.geonames, function(item) {
          return {
            label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
            value: item.name
          }
        }));
      }
    });
  },
  minLength: 2
});
로그인 후 복사

Main events

jQuery UI Autocomplete에는 몇 가지 이벤트가 있습니다. 일부 단계에서 추가 제어에 사용할 수 있습니다:

1.create(event, ui): 자동 완성이 생성되면 이 이벤트의 모양을 어느 정도 제어할 수 있습니다. ): 요청을 시작하기 전에 이 이벤트에서 false를 반환할 수 있습니다. 요청을 취소하세요

3.open(event, ui): 자동 완성 결과 목록이 나타날 때

4.focus(event, ui): 언제 자동 완성 결과 목록의 모든 항목이 포커스를 받습니다. ui.item이 포커스를 받는 항목입니다. Item

5.select(event, ui): 자동 완성 결과 목록의 항목이 선택되면 ui.item이 선택됩니다. item

6.close(event, ui): 자동완성 결과 목록이 닫힐 때

7.change(event, ui): 값이 변경되면 ui.item이 선택된 항목이 됩니다

항목 속성 이러한 이벤트의 UI 매개변수 중 (있는 경우)에는 소스에 관계없이 기본적으로 레이블 및 값 속성이 있습니다. 설정된 데이터가 배열인지 JSON 배열인지에 관계없이 세 가지 유형이 있습니다.

["bjpowernode","动力节点","李四"]
[{label: "动力节点", value: "bjpowernode"}, {label: "李四", value: "李四"}]
[{label: "动力节点", value: "bjpowernode", id: "1"}, {label: "李四", value: "李四", id: "2"}]
로그인 후 복사

세 번째인 경우 유형을 입력하면 ui.item.id 값을 얻을 수도 있습니다.

이러한 이벤트는 다음과 같이 2가지 방법으로 바인딩할 수 있습니다.

// 在参数中
$("#autocomp").autocomplete({
  source: availableTags
  , select: function(e, ui) {
   alert(ui.item.value) 
  }
});
 
// 通过bind来绑定
$("#autocomp").bind("autocompleteselect", function(e, ui) {
  alert(ui.item.value);
});
로그인 후 복사

바인딩을 통해 바인딩하는 데 사용되는 이벤트 이름은 "autocomplete" + 이벤트 이름입니다. 예를 들어 "select"는 "autocompleteselect"입니다.

여러 값에 대한 자동 완성

일반적으로 입력 상자의 자동 완성에는 하나의 값만 필요합니다(예: javascript). 여러 값이 필요한 경우(예: javascript, c#, asp.net) , 추가 처리를 위해 일부 이벤트 바인딩이 필요합니다.

1. 입력 상자의 값이 자동 완성의 단일 값으로 대체되는 것을 방지하려면 포커스 이벤트에서 false를 반환합니다.

2. 이벤트 선택

3. 1

4과 같은 이유로 요소의 keydown 이벤트에 대해 일부 처리를 수행합니다. 콜백 함수 소스를 사용하여 마지막 입력 값을 가져오고 결과를 표시하거나

공식 데모 코드 직접:

// 按逗号分隔多个值
function split(val) {
  return val.split(/,\s*/);
}
// 提取输入的最后一个值
function extractLast(term) {
  return split(term).pop();
}
// 按Tab键时,取消为输入框设置value
function keyDown(event) {
  if (event.keyCode === $.ui.keyCode.TAB &&
      $(this).data("autocomplete").menu.active) {
    event.preventDefault();
  }
}
var options = {
  // 获得焦点
  focus: function() {
    // prevent value inserted on focus
    return false;
  },
  // 从autocomplete弹出菜单选择一个值时,加到输入框最后,并以逗号分隔
  select: function(event, ui) {
    var terms = split(this.value);
    // remove the current input
    terms.pop();
    // add the selected item
    terms.push(ui.item.value);
    // add placeholder to get the comma-and-space at the end
    terms.push("");
    this.value = terms.join(", ");
    return false;
  }
};
// 多个值,本地数组
$("#local3").bind("keydown", keyDown)
  .autocomplete($.extend(options, {
    minLength: 2,
    source: function(request, response) {
      // delegate back to autocomplete, but extract the last term
      response($.ui.autocomplete.filter(
        availableTags, extractLast(request.term)));
    }
  }));
// 多个值,ajax返回json
$("#ajax3").bind("keydown", keyDown)
  .autocomplete($.extend(options, {
    minLength: 2,
    source: function(request, response) {
      $.getJSON("remoteJSON.ashx", {
        term: extractLast(request.term)
      }, response);
    }
  }));
로그인 후 복사

관련 권장 사항:


Ionic3 UI 구성 요소에서 자동 완성을 사용하는 방법

일반적으로 사용되는 자동 완성 사용 예시 10개를 추천합니다. 다운로드를 환영합니다!

자동 완성 사용법 요약

위 내용은 jQuery 자동완성 예제 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿