Plugin penyelesaian otomatis yang keren
http://twitter.github.io/TypeAhead.js
Gunakan plugin Typeafal di Bootstrap untuk menyelesaikan penyelesaian otomatis
Dokumentasi terkait: https://github.com/twitter/typeead.js/blob/master/doc/jquery_typeead.md
Sumber Data:
Lokal: Array
Prefectch: JSON
Remote dan metode lainnya
-----------------------------------------------------------------------------------------------------------------------------
html:
<input id = "orderno" placeholder = "negara" type = "text" name = "ordersn">
JS:
var states = new Bloodhound({datumTokenizer: Bloodhound.tokenizers.whitespace,queryTokenizer: Bloodhound.tokenizers.whitespace,// `states` is an array of state names defined in "The Basics"local: states});var findOrderByIdVague = new Bloodhound({datumTokenizer: Bloodhound.Tokenizers.obj.whitespace ('value'), querytokenizer: Bloodhound.Tokenizers.Whitespace, prefetch: '$ {ctx} /admin/order/preorderbyidvague.json',remote: {url: '$ {ctx} /admin/order/findorderbyidvague/%query.json',wildcard:'%kueri '}, afterselect: function (item) {// peristiwa setelah item pemilihan, item saat ini dipilih. Benar, Sorot: Benar, MinLength: 1}, {Name: 'States', Source: States}); **/$ ('#addCombo .TypeAhead'). Typeafehead (null, {name: 'Best-Pictures', Display: 'Value', Sumber: FindOrderByidVague}); $ ('addPoCo. TPEEA. {console.log ('seleksi:' + sugestion.value);});}); … FindOrderByIdVague/d20150502.json: [{"value": "d20150502173435141299"}, {"value": "D201505021728109304"}]preorderbyidvague.json:
[{"value": "d201"}]Acara Terkait Docs:
Peristiwa Kustom. Peristiwa berikut dipicu pada elemen input selama siklus hidup Typeahead. Typeafehead: Active dipecat ketika typeahead bergerak ke status aktif. Typeafehead: Idle dipecat ketika typeahead bergerak ke state yang diamal. Tipiseer: Buka dipecat ketika hasil ditutup. Dipecat ketika input kehilangan fokus dan nilainya telah berubah karena awalnya menerima fokus. Tipeah: Render dipecat ketika saran diberikan untuk dataset. Pengawal acara akan dipanggil dengan 4 argumen: objek peristiwa jQuery, saran yang diberikan, sebuah bendera yang menunjukkan apakah saran tersebut diambil secara tidak sinkron, dan nama dataset rendering terjadi. Event Handler akan dipanggil dengan 2 argumen: objek acara jQuery dan objek saran yang dipilih. TipeAhead: Autocomplete dipecat ketika autocomplete terjadi. Pengendali acara akan dipanggil dengan 2 argumen: objek peristiwa jQuery dan objek saran yang digunakan untuk Autocomplete.typeAhead: Cursorchange dipecat ketika hasil kursor wadah hasil bergerak. Event Handler akan dipanggil dengan 2 argumen: objek acara jQuery dan objek saran yang dipindahkan ke.typeead: AsyncRequest dipecat ketika permintaan async untuk saran dikirim. Pengawal acara akan dipanggil dengan 3 argumen: objek acara jQuery, kueri saat ini, dan nama dataset permintaan async milik. TypeAhead: Asynccancel dipecat ketika permintaan async dibatalkan. Pengawal acara akan dipanggil dengan 3 argumen: objek acara jQuery, kueri saat ini, dan nama dataset permintaan async milik. TypeAhead: Asyncreceive dipecat ketika permintaan async selesai. Pengawal acara akan dipanggil dengan 3 argumen: objek acara jQuery, kueri saat ini, dan nama dataset permintaan async milik. Penggunaan contoh: $ ('. Typeahead'). Bind ('Typeahead: Select', Function (ev, Saran) {Console.log ('seleksi:' + sugestion);};};typeead.bundle.js:
/*!* TypeAhead.js 0.11.1* https://github.com/twitter/TypeAhead.js* Hak Cipta 2013-2015 Twitter, Inc. dan kontributor lainnya; Lisensi MIT*/(Function (root, factory) {if (typeOf define === "function" && define.amd) {define ("BloodHound", ["jQuery"], function (a0) {return root ["BloodHound"] = Factory (A0);});} Lain if (TypeOf Exports ==/Factory (A0);});} Lain if (TypeOf Exports = = ... Pabrik (membutuhkan ("jQuery"));} else {root ["BloodHound"] = factory (jQuery);}}) (this, function ($) {var _ = function () {"Gunakan ketat"; return {ismsie: function () {return /(msie| | rv :) (/d+(./ d+)?)/i) [2]: false;}, isBlankString: function (str) {return! str || /^/s*$/.test(str); }.escaperegexchars: function (str) {return str.replace (/media/-/ media/ media// //}/(/)/*/+/?/.//^/$/ |]/g, "// $ &");}, isstring: function (obj) {return typeOf obj === "string";}, iSnumber: function (obj) {return Obj === "string";}, iSnumber: function (Obj) {return Obj === "string";}, iSnumber: function (Obj) {return oBj === "string";}, iSnumber: function (Obj) {return oBj === "string";}, iSnumber: function (Obj) {return oBj === "String"; $.isArray,isFunction: $.isFunction,isObject: $.isPlainObject,isUndefined: function(obj) {return typeof obj === "undefined";},isElement: function(obj) {return !!(obj && obj.nodeType === 1);},isJQuery: function(obj) {return obj instanceof $;},toStr: function TOSTR (S) {return _.Isundefined (S) || S === NULL? " fungsi (obj, test) {var result = true; if (! obj) {return hasil;} $. masing -masing (obj, function (key, val) {if (! (result = test.call (null, val, key, obj))) {return false;}}); return !! hasil;}, beberapa: function (obj, uji) {var false;}}); return !! hasil;}, beberapa: function (obj, test) {var false; Hasil;} $. Masing -masing (obj, function (key, val) {if (result = test.call (null, val, key, obj)) {return false;}}); return !! hasil;}, mixin: $ .extend, identity: function (x) {return x;}, clone: function (obj) {return $ .extend (x) {return x; function () {var counter = 0; return function () {return counter ++;};}, templatify: function templatify (obj) {return $ .function (obj)? {var timeout, result; return function () {var context = this, args = argumen, kemudian, callNow; later = function () {timeout = null; if (! segera) {result = func.Apply (konteks, args);}}; callNow = segera, callnow, callnow = nantape; ifeout; ifeout (timeout); {timeout) {timeout =) (callnow = nantor & lanti! func.Apply (konteks, args);} hasil pengembalian;};}, throttle: function (func, tunggu) {var Context, args, timeout, hasil, sebelumnya, kemudian; sebelumnya = 0; kemudian = fungsi () {sebelumnya = tanggal baru (); now -contaction; now; found = func.Apply (konteks, args, args);}; return function (); nol; funch = func.Apply (konteks, args, args);}; return function; = this; args = argumen; if (tetap <= 0) {clearTimeout (timeout); timeout = null; sebelumnya = sekarang; hasil = func.Apply (konteks, args);} lain jika (! JSON.stringify(val);},noop: function() {}};}();var VERSION = "0.11.1";var tokenizers = function() {"use strict";return {nonword: nonword,whitespace: whitespace,obj: {nonword: getObjTokenizer(nonword),whitespace: getObjTokenizer(whitespace)}};function Whitespace (str) {str = _.toStr (str); return str? _.isArray (tombol)? Lrucache = function () {"gunakan ketat"; fungsi lrucache (maxSize) {this.maxsize = _.isnumber (maxSize)? val) {var tailitem = this.list.tail, node; if (this.size> = this.maxSize) {this.list.remove (tailitem); hapus this.hash [tailitem.key]; this.size-;} if (node = this.hash [key]) {node.val = node; node (node = this.hash [key]) {node.val = node; node (node = this.hash [key]) {node.val = node; node (node = this.hash [key]) {node.val = node; node (node = this.hash [KEY]) {node.val = node; node; node this. = node baru (key, val); this.list.add (node); this.hash [key] = node; this.size ++;}}, get: function get (key) {var node = this.hash [key]; if (node) {this.list.movetofront (node); return node.val) {this.list.movetofront (node); return node.val) {{node) (node) (node {node) (node) (node) {node) {node) {node) {node) {node) {node {node); 0; this.hash = {}; this.list = new list ();}}); daftar fungsi () {this.head = this.tail = null;} _. Mixin (list.prototype, {add: function (node) {if (this. This.tail ||. {this.remove (node); this.add (node);}}); function node (key, val) {this.key = key; this.val = val; this.prev = this.next = null;} return lrucache;} (); var persistentStorage = function () {"Penggunaan strict; window.localstorage; local_storage.setitem ("~~~", "!"); local_storage.removeItem ("~~~");} catch (err) {local_storage = null;} function persistentStorage (namespace, override) {this.prefix = ["__ __" namespace, "override) {this.prefix = [" "__" over, "" namespace, "namespace) {this.prefix = [" ] .join (""); this.ttlkey = "__ttl __"; this.keyMatcher = regexp baru ("^" + _.escaperegexchars (this.prefix)); this.ls = override || {_prefix: function(key) {return this.prefix + key;},_ttlKey: function(key) {return this._prefix(key) + this.ttlKey;},_noop: function() {this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;},_safeSet: function(key, val) {coba {this.ls.setItem (key, val);} catch (err) {if (err.name === "quantemededError") {this.clear (); this._noop ();}}}, get: function (key) {if (this.isexpired ();} {this.remove.remove decode (this.ls.getItem (this._prefix (key)));}, set: function (key, val, ttl) {if (_.isnumber (ttl)) {this._safeset (this._ttlKey (key), encode (sekarang () + ttl));}} {ini. this._safeset (this._prefix (key), encode (val));}, hapus: function (key) {this.ls.removeItem (this._ttlkey (key)); Keys.length; i--; {return new Date (). getTime ();} function encode (val) {return json.stringify (_. isundefined (val)? null: val);} function decode (val) {return $ .parsejson (val);} function callingmatchingKeys (keymatcher) {var i, keys, Keys = (); forage = len = forage = forage = len = forage = len len = forage (keysor) {var i, keys = {var i, keys = len; = 6, SharedCache = Lrucache baru (10); transportasi fungsi (o) {o = o || {}; this.cancelled = false; this.lastreq = null; this._send = o.transport; this._get = o.limiter; sharedcache;} transport.setMaxPendingRequests = function setmaxpendingRequests (num) {maxpendingRequests = num;}; transport.resetcache = function resetcache () {sharedcache.reset ();}; _. mixin (transport.protype, {{{{);};}; o mixin (transport.protype, {{{); {}; return o.url + o.type + $ .param (o.data || {});}, _ get: function (o, cb) {var that = this, sidik jari, jqxhr; sidik jari = this._fingerprint (o); if (this.cancelled || sidik jari penending rentequests [sidik jari]) {jqxhr.done (selesai) .fail (fail);} else if (cendingRequestScount <maxpendingRequests) {pendingequestscount ++; failuests [fingerprint) = this._send (o) .done (done) .failquests [fingerprint). {this.ondeckRequestArgs = [] .slice.call (argumen, 0);} function done (resp) {cb (null, resp); that._cache.set (sidik jari, resp);} fail fail () {cb (true); (itu. {}; sidik jari = this._fingerprint (o); Transport;} (); var SearchIndex = window.searchIndex = function () {"Gunakan ketat"; var anak -anak = "c", ids = "i"; fungsi pencarian (o) {o = o || {}; if (o.datumTokener || o. Identify ||. function (data) {var that = this; data = _.isArray (data)? chars, ch; node = that.trie; chars = token.split (""); while (ch = chars.shift ()) {node = node [anak -anak] [ch] || _.map (id, fungsi (id) {return that.datums [id];});}, pencarian: pencarian fungsi (kueri) {var that = this, token, cocok; token = normizetokens (this.queryTokenizer (query)); _. masing -masing (tokens, function (toKen) {node) {node); === 0) {return false;} node = that.trie; chars = token.split (""); while (node && (ch = chars.shift ())) {node = node [anak -anak] [ch];} if (node && chars.length === 0) {ids = node [node]. : IDS;} else {cocok = []; return false;}}); return cocok? values;},reset: function reset() {this.datums = {};this.trie = newNode();},serialize: function serialize() {return {datums: this.datums,trie: this.trie};}});return SearchIndex;function normalizeTokens(tokens) {tokens = _.filter(tokens, function (token) {return !! token;}); tokens = _.map (token, fungsi (token) {return token.tolowercase ();}); return tokens;} function newnode () {var node = {}; node [ids] = []; node [anak -anak] = {{{{}; node [ids] = []; node [anak -anak] = {{{{}; node [ids] = []; node [anak -anak] = {{{{}; node [ids] = []; node [anak -anak] = {{{{}; node [ids] = []; node [anak -anak] {node {{{{node]; {}, unik = []; untuk (var i = 0, len = array.length; i <len; i ++) {if (! lihat [array [i]]) {lihat [array [i]] = true; uniques.push (array [i]);}} uniques return;} function getinters.push (array [i]);}} uniques return;} function getinnection (array [iRay [i]);}} uniques return;} function getINTERSEKSION (array [iRay [i]);}} uniques return;} function getINTERSEKSION (ARRAY (ARRAY [IRAY [ARRAY]; = [];arrayA = arrayA.sort();arrayB = arrayB.sort();var lenArrayA = arrayA.length, lenArrayB = arrayB.length;while (ai < lenArrayA && bi < lenArrayB) {if (arrayA[ai] < arrayB[bi]) {ai++;} else if (arrayA[ai] > arrayb [bi]) {bi ++;} else {intersection.push (arraya [ai]); ai ++; bi ++;}} return intersection;}} (); var prefetch = function () {"menggunakan strict"; var keys = {data: "data", protocol: "Protocol:" Protocol "; Prefetch (o) {this.url = o.url; this.ttl = o.ttl; this.cache = o.cache; this.prepare = o.prepare; this.transform = o.transform; this.transport = o.transport; this.thumbprint = o.thumbprint; ini. PersistentStorage (o.cacheKey);} _. Mixin (prefetch.prototype, {_settings: pengaturan fungsi () {return {url: this.url, type: "get", dataType: "json"}, store: function store (data) {if (! This.cache) {{{{{{{ini. this.ttl); this.storage.set (keys.protocol, location.protocol, this.ttl); this.storage.set (keys.thumbprint, this.thumbprint, this.ttl);}, fromcache: function fromcache () {var var stored = {}; = this.storage.get (keys.data); stored.protocol = this.storage.get (keys.protocol); disimpan. ! isExpired? OnResponse (resp) {cb (null, that.transform (resp));}}, clear: function clear () {this.storage.clear (); return this;}}); return prefetch;} (); var remote = function () {"use strict"; function remote (o) {this. = O.Transform; this.transport = transport baru ({cache: o.cache, limiter: o.limiter, transport: o.transport});} _. mixin (remote.prototype, {_settings: funche function () {return {url: this.url, type ", get", dATTATEPE () {return {URL: this.url, type ", get", dATTED "," {JUCK: "{uRSET"; {var that = this, pengaturan; if (! cb) {return;} query = query || ""; settings = this.prepare (kueri, this._settings ()); return this.transport.get (Pengaturan, OnResponse); Function OnResponse (err, erp) {err? cb(that.transform(resp));}},cancelLastRequest: function cancelLastRequest() {this.transport.cancel();}});return Remote;}();var oParser = function() {"use strict";return function parse(o) {var defaults, sorter;defaults = {initialize: true,identify: _.stringify, datumtokenizer: null, querytokenizer: null, cukup: 5, sorter: null, local: [], prefetch: null, remote: null}; o = _.mixin (default, o || {});! o.datumTokenizer && $ .roring ("o {{}); $ .Error (QueryTokenizer diperlukan "); Sorter = O.Sorter; O.Sorter = Sorter? parseremote (o.remote); return o;}; function parseprefetch (o) {var defaults; if (! o) {return null;} default = {url: null, ttl: 24 * 60 * 60 * 1e3, cache: true, CacheKey: null, nol cetakan: ",", ". null}; o = _.isstring (o)? o.thumbrint; o.transport = o.transport? "Debounce", Ratelimitwait: 300, Transform: _.Identity, Transport: null}; o = _.isstring (o)? toremoteprepare (o); O.Imiter = tolimiter (o); o.transport = O.Transport? ganti, wildcard; persiapkan = o.prepare; ganti = o.replace; wildcard = o.wildcard; if (persiapkan) {return persiapan;} if (ganti) {persiapan = persiapkanreplace;} lain jika (o.wildcard) {persiapkan = persiapkan ward;}} {persiapkan = o.wildcard) {persiapkan = persiapkan ward;} lain {persiapkan = o.wildcard) {persiapan = persiapan; {settings.url = ganti (settings.url, kueri); pengembalian pengembalian;} function preparywildcard (kueri, pengaturan) {settings.url = settings.url.replace (wildcard, encodeuricomponent (query)); pengaturan pengembalian;} function identifikasi identifikasi (gquery, {query)); pengaturan kembali; Metode, tunggu; limiter = o.limiter; metode = o.ratelimitby; tunggu = o.ratelimitwait; if (! limiter) {limiter = /^Throttle$/i.test(method)? tunggu);};} function throttle (tunggu) {return function throttle (fn) {return _.throttle (fn, tunggu);};}} function callbacktodefered (fn) {return function wrapper (o) {var ditangguhkan = $ .deferred (); fn (o, onSuccess (onor) {var ditangguhkan = $ .deferred (); fn (o, onSuccess, onorss = $. {_.defer (function () {Deferred.resolve (resp);});} function onError (err) {_.defer (function () {ditangguhkan. Oparser (o); this.sorter = o.sorter; this.Identify = o.Identify; this.suffivet = o.suffivet; this.local = o.local; this.remote = o.remote baru (o.remote): null; this.prefetch = o.prefetch? SearchIndex({identify: this.identify,datumTokenizer: o.datumTokenizer,queryTokenizer: o.queryTokenizer});o.initialize !== false && this.initialize();}Bloodhound.noConflict = function noConflict() {window && (window.Bloodhound = old);return Bloodhound;};Bloodhound.tokenizers = tokenizers; _. Mixin (BloodHound.Prototype, {__ttAdapter: function ttadapter () {var that = this; return this.remote? withasync: tanpa function; function withasync (query, sync, async) {return that.search (query, sync, query, sync, async) {return that. That.search (kueri, sinkronisasi);}}, _ loadprefetch: function loadPrefetch () {var that = this, ditangguhkan, serial; ditangguhkan = $ .deferred (); if (! this.preFetch) {ditangguhkan.resolve ();} lain jika (serialized = this.promch.fromcache (); {this.index.bootstrap (serial); defred.resolve ();} else {this.prefetch.fromnetwork (selesai);} return retred.promise (); function done (err, data) {if (err) {return Deferred.Rect ();} that.add (data); that.prefetch.store (that.index.serialize ()); ditangguhkan.resolve ();}}, _ inisialisasi: function initialize () {var that = this, ditangguhkan; this.clear (); (this.initpromise = this.) this.initpromise; fungsi addlocaltoIndex () {that.add (that.local);}}, inisize: function initialize (force) {return! this.initpromise || {ids = _.isArray (IDS)? (this.remote && local.length <this.suffivet) {this.remote.get (kueri, prosesremote);} lain jika (this.remote) {this.remote.cancellastrequest (}} {remote) {remote) {var var nondupates. function(l) {return that.identify(r) === that.identify(l);}) && nonDuplicates.push(r);});async && async(nonDuplicates);}},all: function all() {return this.index.all();},clear: function clear() {this.index.reset();return ini;}, clearprefetchcache: function clearprefetchcache () {this.prefetch && this.prefetch.clear (); return ini;}, clearremotecache: function clearremotecache () {transport.resetcache (); return ini;}, ttadapter: function {{{{{); {ttAdapter {); {function {); {function {); {function {); {ttadapter (); {function (); {function {); {function (); {function {ttAdapter (); BloodHound;} (); return BloodHound;}); (function (root, factory) {if (typeof define === "function" && define.amd) {define ("typeead.js", ["jQuery"], function (a0) {return factory (a0);});} lainnya (a0) {pabrikan {a0);};}; Pabrik (membutuhkan ("jQuery"));} else {factory (jQuery);}}) (this, function ($) {var _ = function () {"Gunakan strict"; return {isMsie: function () {return /(msie|Trident)/i.test(navigator.usereSent)? navigator. | rv :) (/d+(./ d+)?)/i) [2]: false;}, isBlankString: function (str) {return! str || /^/s*$/.test(str); }.escaperegexchars: function (str) {return str.replace (/media/-/ media/ media///{/}/(/)/*/+/? y, isfunction: $ .function, isObject: $ .isplainObject, isundefined: function (obj) {return typeOf obj === "tidak terdefinisi";}, iseLement: function (obj) {return !! (obj && obj.nodetype === 1);}, isjQuery: function (Obj && Obj.nodetype === 1);}, isjQuery: function (obj) {=== 1);}, iSjQuery: function (obj) {{{{{{{{{oBJ) {== 1); tostr (s) {return _.isundefined (s) || S === NULL? "": s + "";}, bind: $ .proxy, masing -masing: fungsi (koleksi, cb) {$ .each (koleksi, reverseargs); fungsi reverseargs (indeks, nilai) {return cb (nilai, indeks);}}, peta: $ .map, filter: $ .grep, setiap fungsi (function) {vAR! Hasil;} $. Masing -masing (obj, fungsi (key, val) {if (! (result = test.call (null, val, kunci, obj))) {return false;}}); return !! hasil;}, beberapa: fungsi (test) {var hasil = false; if (! Obj) {return;} masing -masing (masing -masing oF (masing -masing val (if, ife, tombol, obj)) {return false;}}); return !! hasil;}, mixin: $ .extend, identity: function (x) {return x;}, clone: function (obj) {return $ .extend (true, {}, obj);}, getIdgeGenerator: function () {var vaire, {}, obj); templatify (obj) {return $ .function (obj)? obj: template; fungsi templat () {return string (obj);}}, tundukan: function (fn) {setTimeout (fn, 0);}, debounce: function (func, tunggu, segera) {var timeout, return; function return () {var context = ini, args = argumen, kemudian, callnow; func.Apply (konteks, args);}}; callnow = segera &&! Timeout; clearTimeout (timeout); timeout = setTimeOut (kemudian, tunggu); if (callnow) {hasil = func.Amply (context, args);} return hasil;};}, throttle: func. function, tunggu) {context); Sebelumnya = 0; kemudian = function () {Sebelumnya = Tanggal baru (); timeout = null; result = func.Amply (konteks, args);}; return function () {var sekarang = tanggal baru (), tersisa = tunggu - (sekarang - sebelumnya); context = this; args = argumen; if (tetap <= 0) {clearTimeout (timeout); timeout = null; sebelumnya = now; now; hasil = {timeout = context); null; null; sebelumnya = sekarang; hasil = fungsi. setTimeOut (nanti, tersisa);} hasil pengembalian;};}, stringify: function (val) {return _.isstring (val)? val: json.stringify (val);}, noop: function () {}};} (); var www = function () {"Gunakan ketat"; var defaultClassNames = {wrapper: "Twitter-TypeAhead", input: "tt-input", hint: "tt-hint", "tt-m:" tt-m: "tt-d dataon", tt-inpon ", tt-d dataon", tt-datas, "tt-suggestion",selectable: "tt-selectable",empty: "tt-empty",open: "tt-open",cursor: "tt-cursor",highlight: "tt-highlight"};return build;function build(o) {var www, classes;classes = _.mixin({}, defaultClassNames, o);www = {css: buildCSS (), kelas: kelas, html: buildhtml (kelas), selektor: buildselectors (kelas)}; return {css: www.css, html: www.html, kelas: www.classes, selektor: www.selectors, function: mixin: function: o) {o) {o) {o) {o) {o) {o) {o) {o) {o) {www: www. www);}};} function buildHtml (c) {return {wrapper: '<span> </span>', menu: '<vet div> </div>'};} function buildingselectors (kelas) {var selectors = {}; _. masing -masing (kelas, fungsi (v, k) {km. {var css = {wrapper: {position: "Relative", display: "inline-block"}, hint: {position: "absolute", top: "0", kiri: "0", BorderColor: "Transparent", Boxshadow: "None", Opacity: "1"}, Input: {Posisi: "Relping:" RAWATION: "RELAATION:" RELAATION: "," RUBLOIF: "POSIS:" POSIS: "BOXSHADOW:" NONE, "1", " "Transparent"}, inputwithnoNint: {position: "Relative", Verticalalign: "Top"}, Menu: {Position: "Absolute", Top: "100%", kiri: "0", Zindex: "100", display: "none"}, ltr: {kiri: "0", kanan: "auto",}, rt: {{{{{{{{{{{{auto: " "0"}}; if (_.ismSie ()) {_.mixin (css.input, {latar belakang: "URL (data: gambar/gif; base64, r0lgodlhaqabaiaaaaaaaaaap /// yh5baeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAdse {}}}}}}}}} {} {} {}} {} {} {} {} {} namespace, deprecationmap; namespace = "typeahead:"; decrecationmap = {render: "rendered", cursorchange: "cursorchanged", pilih: "dipilih", autocomplete: "autocompeted"}; function eventbus (o) {if (! o || el ");} ini. $ el = $ (o.el);} _. mixin (eventbus.prototype, {_trigger: function (type, args) {var $ e; $ e = $ .event (namespace + type); (args = args || []). unshift ($ e); ini. $ e;}, sebelum: function (type) {var args, $ e; args = [] .slice.call (argumen, 1); $ e = this._trigger ("sebelum" + type, args); return $ e.isdefaultPrevented ();}, trigger: function (type) {var DepresatedType; this. (deprecatedType = deprecationMap[type]) {this._trigger(deprecatedType, [].slice.call(arguments, 1));}}});return EventBus;}();var EventEmitter = function() {"use strict";var splitter = //s+/, nextTick = getNextTick();return {onSync: Onsync, OnAsync: OnAsync, OFF: OFF, Trigger: Trigger}; function on (metode, tipe, cb, konteks) {var type; if (! cb) {return this;} type = type.split (splitter); cb = konteks? bindContext (CB, konteks): cb; this._callbacks = this._callbacks || {}; while (type = type.shift ()) {this._callbacks [type] = this._callbacks [type] || {Sync: [], async: []}; this._callbacks [type] [Metode] .push (cb);} return ini;} fungsi onasync (tipe, cb, konteks) {return on.call (ini, "async", tipe, cb, konteks);} function onync (cb, cb, cb, cb, cb, cb. konteks);} function off (type) {var type; if (! this._callbacks) {return this;} type = type.split (splitter); while (type = type.shift ()) {hapus this._callbacks [type];} return this;} function pemicu (type) {var type, callbacks, args, syncflush, asyncflush; if (! this._callbacks) {return this;} type = type.split (splitter); types.shift()) && (callbacks = this._callbacks[type])) {syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));syncFlush() && nextTick(asyncFlush);}return this;}function getFlush (callbacks, context, args) {return flush; function flush () {var dibatalkan; untuk (var i = 0, len = callbacks.length ;! dibatalkan && i <len; i += 1) {dibatalkan = callbacks [i] .Apply (context, args) === FALSE;} return! af callback; (window.setimmediate) {nextTickFn = function nextTickSetimmediate (fn) {setimmediate (function () {fn ();});} else {nexttickfn = function nextticksetTexeOx (fn) {setTimeout (function () {fn ();}, 0) (fn) {setTimeout (function () {fn ();}, 0) (fn) {function (function () {fn ();}, 0) (fn) {function () {fn ();}, 0) (fn) {function () {fn ();};};};};};};};};};};};}; konteks) {return fn.bind? fn.bind(context) : function() {fn.apply(context, [].slice.call(arguments, 0));};}}();var highlight = function(doc) {"use strict";var defaults = {node: null,pattern: null,tagName: "strong",className: null,wordsOnly: false,caseSensitive: false};return function highlight(o) {var regex; o = _.mixin ({}, default, o); if (! o.node ||! o.pattern) {return;} o.pattern = _.isArray (o.pattern)? o.pattern : [ o.pattern ];regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);traverse(o.node, highlightTextNode);function highlightlightTextNode(textNode) {var match, patternNode, wrapperNode;if (match = regex.exec(textNode.data)) {wrapperNode = doc.createElement(o.tagName);o.className && (wrapperNode.className = o.className);patternNode = textNode.splitText(match.index);patternNode.splitText(match[0].length);wrapperNode.appendChild(patternNode.cloneNode(true));textNode.parentNode.replaceChild(wrapperNode, patternNode);}return !!match;}function traverse(el, highlightTextNode) {var childNode, TEXT_NODE_TYPE = 3;for (var i = 0; i < el.childNodes.length; i++) {childNode = el.childNodes[i];if (childNode.nodeType === TEXT_NODE_TYPE) {i += highlightTextNode(childNode) ? 1 : 0;} else {traverse(childNode, highlightTextNode);}}}};function getRegex(patterns, caseSensitive, wordsOnly) {var escapedPatterns = [], regexStr;for (var i = 0, len = patterns.length; i < len; i++) {escapedPatterns.push(_.escapeRegExChars(patterns[i]));}regexStr = wordsOnly ? "//b(" + escapedPatterns.join("|") + ")//b" : "(" + escapedPatterns.join("|") + ")";return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");}}(window.document);var Input = function() {"use strict";var specialKeyCodeMap;specialKeyCodeMap = {9: "tab",27: "esc",37: "left",39: "right",13: "enter",38: "up",40: "down"};function Input(o, www) {o = o || {};if (!o.input) {$.error("input is missing");}www.mixin(this);this.$hint = $(o.hint);this.$input = $(o.input);this.query = this.$input.val(); this.queryWhenFocused = this.hasFocus() ? this.query : null;this.$overflowHelper = buildOverflowHelper(this.$input);this._checkLanguageDirection();if (this.$hint.length === 0) {this.setHint = this.getHint = this.clearHint = this.clearHint IfInvalid = _.noop;}}Input.normalizeQuery = function(str) {return _.toStr(str).replace(/^/s*/g, "").replace(//s{2,}/g, " ");};_.mixin(Input.prototype, EventEmitter, {_onBlur: function onBlur() {this.resetInputValue();this.trigger("blurred");},_onFocus: function onFocus() {this.queryWhenFocused = this.query;this.trigger("focused");},_onKeydown: function onKeydown($e) {var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; this._managePreventDefault(keyName, $e);if (keyName && this._shouldTrigger(keyName, $e)) {this.trigger(keyName + "Keyed", $e);}},_onInput: function onInput() {this._setQuery(this.getInputValue());this.clearHintIfInvalid();this._checkLanguageDirection();},_managePreventDefault: function managePreventDefault(keyName, $e) {var preventDefault;switch (keyName) {case "up":case "down":preventDefault = !withModifier($e);break;default:preventDefault = false;}preventDefault && $e.preventDefault();},_shouldTrigger: function shouldTrigger(keyName, $e) {var trigger;switch (keyName) {case "tab":trigger = !withModifier($e);break;default:trigger = true;}return trigger;},_checkLanguageDirection: function checkLanguageDirection() {var dir = (this.$input.css("direction") || "ltr").toLowerCase();if (this.dir !== dir) {this.dir = dir;this.$hint.attr("dir", dir);this.trigger("langDirChanged", dir);}},_setQuery: function setQuery(val, silent) {var areEquivalent, hasDifferentWhitespace; areEquivalent = areQueriesEquivalent(val, this.query);hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;this.query = val;if (!silent && !areEquivalent) {this.trigger("queryChanged", this.query);} else if (!silent && hasDifferentWhitespace) {this.trigger("whitespaceChanged", this.query);}},bind: function() {var that = onBlur, onFocus, onKeydown, onInput;onBlur = _.bind(this._onBlur, this);onFocus = _.bind(this._onFocus, this);onKeydown = _.bind(this._onKeydown, this);onInput = _.bind(this._onInput, this);onInput = _.bind(this._onInput, this);this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);if (!_.isMsie() || _.isMsie() > 9) {this.$input.on("input.tt", onInput);} else {this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {if (specialKeyCodeMap[$e.which || $e.keyCode]) {return;}_.defer(_.bind(that._onInput, that, $e));});});} return this;},focus: function focus() {this.$input.focus();},blur: function blur() {this.$input.blur();},getLangDir: function getLangDir() {return this.dir;},getQuery: function getQuery() {return this.query || "";},setQuery: function setQuery(val, silent) {this.setInputValue(val);this._setQuery(val, silent);},hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {return this.query !== this.queryWhenFocused;},getInputValue: function getInputValue() {return this.$input.val();},setInputValue: function setInputValue(value) {this.$input.val(value);this.clearHintIfInvalid();this._checkLanguageDirection();},resetInputValue: function resetInputValue() {this.setInputValue(this.query);},getHint: function getHint() {return this.$hint.val();},setHint: function setHint(value) {this.$hint.val(value);},clearHint: function clearHint() {this.setHint("");},clearHintIfInvalid: function clearHintIfInvalid() {var val, hint, valIsPrefixOfHint, isValid;val = this.getInputValue();hint = this.getHint();valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();!isValid && this.clearHint();},hasFocus: function hasFocus() {return this.$input.is(":focus");},hasOverflow: function hasOverflow() {var constraint = this.$input.width() - 2;this.$overflowHelper.text(this.getInputValue());return this.$overflowHelper.width() >= constraint;},isCursorAtEnd: function() {var valueLength, selectionStart, range;valueLength = this.$input.val().length;selectionStart = this.$input[0].selectionStart;if (_.isNumber(selectionStart)) {return selectionStart === valueLength;} else if (document.selection) {range = document.selection.createRange();range.moveStart("character", -valueLength);return valueLength === range.text.length;}return true;},destroy: function destroy() {this.$hint.off(".tt");this.$input.off(".tt");this.$overflowHelper.remove();this.$hint = this.$input = this.$overflowHelper = $("<div>");}});return Input;function buildOverflowHelper($input) {return $('<pre aria-hidden="true"></pre>').css({position: "absolute",visibility: "hidden",whiteSpace: "pre",fontFamily: $input.css("font-family"),fontSize: $input.css("font-size"),fontStyle: $input.css("font-style"),fontVariant: $input.css("font-variant"),fontWeight: $input.css("font-weight"),wordSpacing: $input.css("word-spacing"),letterSpacing: $input.css("letter-spacing"),textIndent: $input.css("text-indent"),textRendering: $input.css("text-rendering"),textTransform: $input.css("text-transform")}).insertAfter($input);}function areQueriesEquivalent(a, b) {return Input.normalizeQuery(a) === Input.normalizeQuery(b);}function withModifier($e) {return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;}}();var Dataset = function() {"use strict";var keys, nameGenerator;keys = {val: "tt-selectable-display",obj: "tt-selectable-object"};nameGenerator = _.getIdGenerator();function Dataset(o, www) {o = o || {};o.templates = o.templates || {};o.templates.notFound = o.templates.notFound || o.templates.empty;if (!o.source) {$.error("missing source");}if (!o.node) {$.error("missing node");}if (o.name && !isValidName(o.name)) {$.error("invalid dataset name: " + o.name);}www.mixin(this); this.highlight = !!o.highlight; this.name = o.name || nameGenerator(); this.limit = o.limit || 5; this.displayFn = getDisplayFn(o.display || o.displayKey); this.templates = getTemplates(o.templates, this.displayFn);this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;this._resetLastSuggestion();this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name);}Dataset.extractData = function extractData(el) {var $el = $(el);if ($el.data(keys.obj)) {return {val: $el.data(keys.val) || "",obj: $el.data(keys.obj) || null};}return null;};_.mixin(Dataset.prototype, EventEmitter, {_overwrite: function overwrite(query, suggestions) {suggestions = suggestions || [];if (suggestions.length) {this._renderSuggestions(query, suggestions);} else if (this.async && this.templates.pending) {this._renderPending(query);} else if (!this.async && this.templates.notFound) {this._renderNotFound(query);} else {this._empty();} this.trigger("rendered", this.name, suggestions, false);},_append: function append(query, suggestions) {suggestions = suggestions || [];if (suggestions.length && this.$lastSuggestion.length) {this._appendSuggestions(query, suggestions);} else if (suggestions.length) {this._renderSuggestions(query, suggestions);} else if (!this.$lastSuggestions.length && this.templates.notFound) {this._renderNotFound(query);} this.trigger("rendered", this.name, suggestions, true);},_renderSuggestions: function renderSuggestions(query, suggestions) {var $fragment;$fragment = this._getSuggestionsFragment(query, suggestions); this.$lastSuggestion = $fragment.children().last(); this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));},_appendSuggestions: function appendSuggestions(query, suggestions) {var $fragment, $lastSuggestion;$fragment = this._getSuggestionsFragment(query, suggestions));},_appendSuggestions: function appendSuggestions(query, suggestions) {var $fragment, $lastSuggestion;$fragment = this._getSuggestionsFragment(query, suggestions);$lastSuggestion = $fragment.children().last();this.$lastSuggestion.after($fragment);this.$lastSuggestion = $lastSuggestion;},_renderPending: function renderPending(query) {var template = this.templates.pending;this._resetLastSuggestion();template && this.$el.html(template({query: query,dataset: this.name}));},_renderNotFound: function renderNotFound(query) {var template = this.templates.notFound; this._resetLastSuggestion();template && this.$el.html(template({query: query,dataset: this.name}));},_empty: function empty() {this.$el.empty(); this._resetLastSuggestion();},_getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {var that = this, fragment;fragment = document.createDocumentFragment();_.each(suggestions, function getSuggestionNode(suggestion) {var $el, context;context = that._injectQuery(query, suggestion);$el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable);fragment.appendChild($el[0]);});this.highlight && highlight({className: this.classes.highlight,node: fragment,pattern: query});return $(fragment);},_getFooter: function getFooter(query, suggestions) {return this.templates.footer ? this.templates.footer({query: query,suggestions: suggestions,dataset: this.name}) : null;},_getHeader: function getHeader(query, suggestions) {return this.templates.header ? this.templates.header({query: query,suggestions: suggestions,dataset: this.name}) : null;},_resetLastSuggestion: function resetLastSuggestion() {this.$lastSuggestion = $();},_injectQuery: function injectQuery(query, obj) {return _.isObject(obj) ? _.mixin({_query: query}, obj) : obj;},update: function update(query) {var that = this, canceled = false, syncCalled = false, rendered = 0;this.cancel();this.cancel = function cancel() {cancel = true;that.cancel = $.noop;that.async && that.trigger("asyncCanceled", query);};this.source(query, sync, async);!syncCalled && sync([]);function sync(suggestions) {if (syncCalled) {return;}syncCalled = true;suggestions = (suggestions || []).slice(0, that.limit);reendered = suggestions.length;that._overwrite(query, suggestions);if (rendered < that.limit && that.async) {that.trigger("asyncRequested", query);}}function async(suggestions) {suggestions = suggestions || [];if (!cancel && rendered < that.limit) {that.cancel = $.noop;rendered += suggestions.length;that._append(query, suggestions.slice(0, that.limit - rendered));that.async && that.trigger("asyncReceived", query);}}},cancel: $.noop,clear: function clear() {this._empty();this.cancel();this.trigger("cleared");},isEmpty: function isEmpty() {return this.$el.is(":empty");},destroy: function destroy() {this.$el = $("<div>");}});return Dataset;function getDisplayFn(display) {display = display || _.stringify;return _.isFunction(display) ? display : displayFn;function displayFn(obj) {return obj[display];}}function getTemplates(templates, displayFn) {return {notFound: templates.notFound && _.templatify(templates.notFound),pending: templates.pending && _.templatify(templates.pending),header: templates.header && _.templatify(templates.header),footer: templates.footer && _.templatify(templates.footer),suggestion: templates.suggestion || suggestionTemplate};function suggestionTemplate(context) {return $("<div>").text(displayFn(context));}}function isValidName(str) {return /^[_a-zA-Z0-9-]+$/.test(str);}}();var Menu = function() {"use strict";function Menu(o, www) {var that = this;o = o || {};if (!o.node) {$.error("node is required");}www.mixin(this);this.$node = $(o.node);this.query = null;this.datasets = _.map(o.datasets, initializeDataset);function initializeDataset(oDataset) {var node = that.$node.find(oDataset.node).first();oDataset.node = node.length? node : $("<div>").appendTo(that.$node);return new Dataset(oDataset, www);}}_.mixin (Menu.prototype, EventEmitter, {_onSelectableClick: function onSelectableClick($e) {this.trigger("selectableClicked", $($e.currentTarget));},_onRendered: function onRendered(type, dataset, suggestions, async) {this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());this.trigger("datasetRendered", dataset, suggestions, async);},_onCleared: function onCleared() {this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); this.trigger("datasetCleared");},_propagate: function propagate() {this.trigger.apply(this, arguments);},_allDatasetsEmpty: function allDatasetsEmpty() {return _.every(this.datasets, isDatasetEmpty);function isDatasetEmpty(dataset) {return dataset.isEmpty();}},_getSelectables: function getSelectables() {return this.$node.find(this.selectors.selectable);},_removeCursor: function _removeCursor() {var $selectable = this.getActiveSelectable();$selectable && $selectable.removeClass(this.classes.cursor);},_ensureVisible: function ensureVisible($el) {var elTop, elBottom, nodeScrollTop, nodeHeight;elTop = $el.position().top;elBottom = elTop + $el.outerHeight(true);nodeScrollTop = this.$node.scrollTop();nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10);if (elTop < 0) {this.$node.scrollTop(nodeScrollTop + elTop);} else if (nodeHeight < elBottom) {this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));}},bind: function() {var that = this, onSelectableClick;onSelectableClick = _.bind(this._onSelectableClick, this);this.$node.on("click.tt", this.selectors.selectable, onSelectableClick);_.each(this.datasets, function(dataset) {dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that);});return this;},isOpen: function isOpen() {return this.$node.hasClass(this.classes.open);},open: function open() {this.$node.addClass(this.classes.open);},close: function close() {this.$node.removeClass(this.classes.open);this._removeCursor();},setLanguageDirection: function setLanguageDirection(dir) {this.$node.attr("dir", dir);},selectableRelativeToCursor: function selectableRelativeToCursor(delta) {var $selectables, $oldCursor, oldIndex, newIndex;$oldCursor = this.getActiveSelectable();$selectables = this._getSelectables();oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;newIndex = oldIndex + delta;newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;return newIndex === -1 ? null : $selectables.eq(newIndex);},setCursor: function setCursor($selectable) {this._removeCursor();if ($selectable = $selectable && $selectable.first()) {$selectable.addClass(this.classes.cursor);this._ensureVisible($selectable);}},getSelectableData: function getSelectableData($el) {return $el && $el.length ? Dataset.extractData($el) : null;},getActiveSelectable: function getActiveSelectable() {var $selectable = this._getSelectables().filter(this.selectors.cursor).first();return $selectable.length ? $selectable : null;},getTopSelectable: function getTopSelectable() {var $selectable = this._getSelectables().first();return $selectable.length ? $selectable : null;},update: function update(query) {var isValidUpdate = query !== this.query;if (isValidUpdate) {this.query = query;_.each(this.datasets, updateDataset);}return isValidUpdate;function updateDataset(dataset) {dataset.update(query);}},empty: function empty() {_.each(this.datasets, clearDataset);this.query = null;this.$node.addClass(this.classes.empty);function clearDataset(dataset) {dataset.clear();}},destroy: function destroy() {this.$node.off(".tt");this.$node = $("<div>");_.each(this.datasets, destroyDataset);function destroyDataset(dataset) {dataset.destroy();}}});return Menu;}();var DefaultMenu = function() {"use strict";var s = Menu.prototype;function DefaultMenu() {Menu.apply(this, [].slice.call(arguments, 0));}_.mixin(DefaultMenu.prototype, Menu.prototype, {open: function open() {!this._allDatasetsEmpty() && this._show();return s.open.apply(this, [].slice.call(arguments, 0));},close: function close() {this._hide();return s.close.apply(this, [].slice.call(arguments, 0));},_onRendered: function onRendered() {if (this._allDatasetsEmpty()) {this._hide();} else {this.isOpen() && this._show();} return s._onRendered.apply(this, [].slice.call(arguments, 0));},_onCleared: function onCleared() {if (this._allDatasetsEmpty()) {this._hide();} else {this.isOpen() && this._show();} return s._onCleared.apply(this, [].slice.call(arguments, 0));},setLanguageDirection: function setLanguageDirection(dir) {this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl);return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));},_hide: function hide() {this.$node.hide();},_show: function show() {this.$node.css("display", "block");}});return DefaultMenu;}();var Typeahead = function() {"use strict";function Typeahead(o, www) {var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;o = o || {};if (!o.input) {$.error("missing input");}if (!o.menu) {$.error("missing menu");}if (!o.eventBus) {$.error("missing event bus");}www.mixin(this);this.eventBus = o.eventBus;this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;this.input = o.input;this.menu = o.menu;this.enabled = true;this.active = false;this.input.hasFocus() && this.activate();this.dir = this.input.getLangDir();this._hacks();this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this);onFocused = c(this, "activate", "open", "_onFocused");onBlurred = c(this, "deactivate", "_onBlurred");onEnterKeyed = c(this, "isActivate", "isOpen", "_onEnterKeyed");onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed");onEscKeyed = c(this, "isActive", "_onEscKeyed");onUpKeyed = c(this, "isActive", "open", "_onUpKeyed");onDownKeyed = c(this, "isActive", "open", "_onDownKeyed");onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed");onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed");onQueryChanged = c(this, "_openIfActive", "_onQueryChanged");onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged");this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this);}_.mixin(Typeahead.prototype, {_hacks: function hacks() {var $input, $menu;$input = this.input.$input || $("<div>");$menu = this.menu.$node || $("<div>");$input.on("blur.tt", function($e) {var active, isActive, hasActive;active = document.activeElement; isActive = $menu.is(active); hasActive = $menu.has(active).length > 0;if (_.isMsie() && (isActive || hasActive)) {$e.preventDefault();$e.stopImmediatePropagation();_.defer(function() {$input.focus();});}});$menu.on("mousedown.tt", function($e) {$e.preventDefault();});},_onSelectableClicked: function onSelectableClicked(type, $el) {this.select($el);},_onDatasetCleared: function onDatasetCleared() {this._updateHint();},_onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {this._updateHint();this.eventBus.trigger("render", suggestions, async, dataset);},_onAsyncRequested: function onAsyncRequested(type, dataset, query) {this.eventBus.trigger("asyncrequest", query, dataset);},_onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {this.eventBus.trigger("asynccancel", query, dataset);},_onAsyncReceived: function onAsyncReceived(type, dataset, query) {this.eventBus.trigger("asyncreceive", query, dataset);},_onFocused: function onFocused() {this._minLengthMet() && this.menu.update(this.input.getQuery());},_onBlurred: function onBlurred() {if (this.input.hasQueryChangedSinceLastFocus()) {this.eventBus.trigger("change", this.input.getQuery());}},_onEnterKeyed: function onEnterKeyed(type, $e) {var $selectable;if ($selectable = this.menu.getActiveSelectable()) {this.select($selectable) && $e.preventDefault();}},_onTabKeyed: function onTabKeyed(type, $e) {var $selectable;if ($selectable = this.menu.getActiveSelectable()) {this.select($selectable) && $e.preventDefault();} else if ($selectable = this.menu.getTopSelectable()) {this.autocomplete($selectable) && $e.preventDefault();}},_onEscKeyed: function onEscKeyed() {this.close();},_onUpKeyed: function onUpKeyed() {this.moveCursor(-1);},_onDownKeyed: function onDownKeyed() {this.moveCursor(+1);},_onLeftKeyed: function onLeftKeyed() {if (this.dir === "rtl" && this.input.isCursorAtEnd()) {this.autocomplete(this.menu.getTopSelectable());}},_onRightKeyed: function onRightKeyed() {if (this.dir === "ltr" && this.input.isCursorAtEnd()) {this.autocomplete(this.menu.getTopSelectable());}},_onQueryChanged: function onQueryChanged(e, query) {this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();},_onWhitespaceChanged: function onWhitespaceChanged() {this._updateHint();},_onLangDirChanged: function onLangDirChanged(e, dir) {if (this.dir !== dir) {this.dir = dir;this.menu.setLanguageDirection(dir);}},_openIfActive: function openIfActive() {this.isActive() && this.open();},_minLengthMet: function minLengthMet(query) {query = _.isString(query) ? query : this.input.getQuery() || "";return query.length >= this.minLength;},_updateHint: function updateHint() {var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;$selectable = this.menu.getTopSelectable();data = this.menu.getSelectableData($selectable);val = this.input.getInputValue();if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {query = Input.normalizeQuery(val);escapedQuery = _.escapeRegExChars(query);frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");match = frontMatchRegEx.exec(data.val);match && this.input.setHint(val + match[1]);} else {this.input.clearHint();}},isEnabled: function isEnabled() {return this.enabled;},enable: function enable() {this.enabled = true;},disable: function disable() {this.enabled = false;},isActive: function isActive() {return this.active;},activate: function activated() {if (this.isActive()) {return true;} else if (!this.isEnabled() || this.eventBus.before("active")) {return false;} else {this.active = true; this.eventBus.trigger("active");return true;}},deactivate: function deactivate() {if (!this.isActive()) {return true;} else if (this.eventBus.before("idle")) {return false;} else {this.active = false;this.close();this.eventBus.trigger("idle");return true;}},isOpen: function isOpen() {return this.menu.isOpen();},open: function open() {if (!this.isOpen() && !this.eventBus.before("open")) {this.menu.open();this._updateHint();this.eventBus.trigger("open");}return this.isOpen();},close: function close() {if (this.isOpen() && !this.eventBus.before("close")) {this.menu.close();this.input.clearHint();this.input.resetInputValue();this.eventBus.trigger("close");} return !this.isOpen();},setVal: function setVal(val) {this.input.setQuery(_.toStr(val));},getVal: function getVal() {return this.input.getQuery();},select: function select($selectable) {var data = this.menu.getSelectableData($selectable);if (data && !this.eventBus.before("select", data.obj)) {this.input.setQuery(data.val, true);this.eventBus.trigger("select", data.obj);this.close();return true;} return false;},autocomplete: function autocomplete($selectable) {var query, data, isValid;query = this.input.getQuery();data = this.menu.getSelectableData($selectable);isValid = data && query !== data.val;if (isValid && !this.eventBus.before("autocomplete", data.obj)) {this.input.setQuery(data.val);this.eventBus.trigger("autocomplete", data.obj);return true;} return false;},moveCursor: function moveCursor(delta) {var query, $candidate, data, payload, cancelMove;query = this.input.getQuery();$candidate = this.menu.selectableRelativeToCursor(delta);data = this.menu.getSelectableData($candidate);payload = data ? data.obj : null;cancelMove = this._minLengthMet() && this.menu.update(query);if (!cancelMove && !this.eventBus.before("cursorchange", payload)) {this.menu.setCursor($candidate);if (data) {this.input.setInputValue(data.val);} else {this.input.resetInputValue();this._updateHint();}this.eventBus.trigger("cursorchange", payload);return true;}return false;},destroy: function destroy() {this.input.destroy();this.menu.destroy();}});return Typeahead;function c(ctx) {var methods = [].slice.call(arguments, 1);return function() {var args = [].slice.call(arguments);_.each(methods, function(method) {return ctx[method].apply(ctx, args);});};}}();(function() {"use strict";var old, keys, methods;old = $.fn.typeahead;keys = {www: "tt-www",attrs: "tt-attrs",typeahead: "tt-typeahead"};methods = {initialize: function initialize(o, datasets) {var www;datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);o = o || {};www = WWW(o.classNames);return this.each(attach);function attach() {var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;_.each(datasets, function(d) {d.highlight = !!o.highlight;});$input = $(this);$wrapper = $(www.html.wrapper);$hint = $elOrNull(o.hint);$menu = $elOrNull(o.menu);defaultHint = o.hint !== false && !$hint;defaultMenu = o.menu !== false && !$menu;defaultHint && ($hint = buildHintFromInput($input, www));defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));$hint && $hint.val("");$input = prepInput($input, www);if (defaultHint || defaultMenu) {$wrapper.css(www.css.wrapper);$input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);$input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);}MenuConstructor = defaultMenu ? DefaultMenu : Menu;eventBus = new EventBus({el: $input});input = new Input({hint: $hint,input: $input}, www);menu = new MenuConstructor({node: $menu,datasets: datasets}, www);typeahead = new Typeahead({input: input,menu: menu,eventBus: eventBus,minLength: o.minLength}, www);$input.data(keys.typeahead, typeahead);}},isEnabled: function isEnabled() {var enabled;ttEach(this.first(), function(t) {enabled = t.isEnabled();});return enabled;},enable: function enable() {ttEach(this, function(t) {t.enable();});return this;},disable: function disable() {ttEach(this, function(t) {t.disable();});return this;},isActive: function isActive() {var active;ttEach(this.first(), function(t) {active = t.isActivate();});return active;},activate: function activated() {ttEach(this, function(t) {t.activate();});return this;},deactivate: function deactivate() {ttEach(this, function(t) {t.deactivate();});return this;},isOpen: function isOpen() {var open;ttEach(this.first(), function(t) {open = t.isOpen();});return open;},open: function open() {ttEach(this, function(t) {t.open();});return this;},close: function close() {ttEach(this, function(t) {t.close();});return this;},select: function select(el) {var success = false, $el = $(el);ttEach(this.first(), function(t) {success = t.select($el);});return success;},autocomplete: function autocomplete(el) {var success = false, $el = $(el);ttEach(this.first(), function(t) {success = t.autocomplete($el);});return success;},moveCursor: function moveCursoe(delta) {var success = false;ttEach(this.first(), function(t) {success = t.moveCursor(delta);});return success;},val: function val(newVal) {var query;if (!arguments.length) {ttEach(this.first(), function(t) {query = t.getVal();});return query;} else {ttEach(this, function(t) {t.setVal(newVal);});return this;}},destroy: function destroy() {ttEach(this, function(typeahead, $input) {revert($input);typeahead.destroy();});return this;}};$.fn.typeahead = function(method) {if (methods[method]) {return methods[method].apply(this, [].slice.call(arguments, 1));} else {return methods.initialize.apply(this, arguments);}};$.fn.typeahead.noConflict = function noConflict() {$.fn.typeahead = old;return this;};function ttEach($els, fn) {$els.each(function() {var $input = $(this), typeahead;(typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);});}function buildHintFromInput($input, www) {return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({autocomplete: "off",spellcheck: "false",tabindex: -1});}function prepInput($input, www) {$input.data(keys.attrs, {dir: $input.attr("dir"),autocomplete: $input.attr("autocomplete"),spellcheck: $input.attr("spellcheck"),style: $input.attr("style")});$input.addClass(www.classes.input).attr({autocomplete: "off",spellcheck: false});try {!$input.attr("dir") && $input.attr("dir", "auto");} catch (e) {}return $input;}function getBackgroundStyles($el) {return {backgroundAttachment: $el.css("background-attachment"),backgroundClip: $el.css("background-clip"),backgroundColor: $el.css("background-color"),backgroundImage: $el.css("background-image"),backgroundOrigin: $el.css("background-origin"),backPosition: $el.css("background-position"),backgroundRepeat: $el.css("background-repeat"),backgroundSize: $el.css("background-size")};}function revert($input) {var www, $wrapper;www = $input.data(keys.www);$wrapper = $input.parent().filter(www.selectors.wrapper);_.each($input.data(keys.attrs), function(val, key) {_.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);});$input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);if ($wrapper.length) {$input.detach().insertAfter($wrapper);$wrapper.remove();}}function $elOrNull(obj) {var isValid, $el;isValid = _.isJQuery(obj) || _.isElement(obj);$el = isValid ? $(obj).first() : [];return $el.length ? $el : null;}})();});typeahead.css:
.typeahead,.tt-query,.tt-hint {width: 396px;height: 30px;padding: 8px 12px;font-size: 24px;line-height: 30px;border: 2px solid #ccc;-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;outline: none;}.typeahead {background-color: #fff;}.typeahead:focus {border: 2px solid #0097cf;}.tt-query {-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);}.tt-hint {color: #999}.tt-menu {width: 422px;margin: 12px 0;padding: 8px 0;background-color: #fff;border: 1px solid #ccc;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;-webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);-moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);box-shadow: 0 5px 10px rgba(0,0,0,.2);}.tt-suggestion {padding: 3px 20px;font-size: 18px;line-height: 24px;}.tt-suggestion:hover {cursor: pointer;color: #fff;background-color: #0097cf;}.tt-suggestion.tt-cursor {color: #fff;background-color: #0097cf;}.tt-suggestion p {margin: 0;}.gist {font-size: 14px;}/* example specific styles *//* ----------------------- */#custom-templates .empty-message {padding: 5px 10px;text-align: center;}#multiple-datasets .league-name {margin: 0 20px 5px 20px;padding: 3px 0;border-bottom: 1px solid #ccc;}#scrollable-dropdown-menu .tt-menu {max-height: 150px;overflow-y: auto;}#rtl-support .tt-menu {text-align: right;}The above is what the editor introduced to you. Bootstrap3 uses the typeahead plug-in to achieve automatic completion function. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!