亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

BootStrap Typeahead自動補全插件實例代碼

2019-11-20 09:15:55
字體:
來源:轉載
供稿:網友

關鍵代碼如下所示:

$('#Sale').typeahead({ajax: {url: '@Url.Action("../Contract/GetSale")',//timeout: 300,method: 'post',triggerLength: 1,loadingClass: null,preProcess: function (result) {return result;}},display: "Value",val: "ID",items: 10,itemSelected: function (item, val, text) {$("#SalesID").val(val);}}); 

這種 typeahead自動補全不是bootstrap常用的typeahead.js。 以下是typeahead.js代碼(如果有bootstrap3-typeahead.js更好)

// ----------------------------------------------------------------------------//// bootstrap-typeahead.js //// Twitter Bootstrap Typeahead Plugin// v1.2.2// https://github.com/tcrosen/twitter-bootstrap-typeahead////// Author// ----------// Terry Rosen// tcrosen@gmail.com | @rerrify | github.com/tcrosen/////// Description// ----------// Custom implementation of Twitter's Bootstrap Typeahead Plugin// http://twitter.github.com/bootstrap/javascript.html#typeahead////// Requirements// ----------// jQuery 1.7+// Twitter Bootstrap 2.0+//// ----------------------------------------------------------------------------!function ($) {"use strict";//------------------------------------------------------------------//// Constructor//var Typeahead = function (element, options) {this.$element = $(element);this.options = $.extend(true, {}, $.fn.typeahead.defaults, options);this.$menu = $(this.options.menu).appendTo('body');this.shown = false;// Method overrides this.eventSupported = this.options.eventSupported || this.eventSupported;this.grepper = this.options.grepper || this.grepper;this.highlighter = this.options.highlighter || this.highlighter;this.lookup = this.options.lookup || this.lookup;this.matcher = this.options.matcher || this.matcher;this.render = this.options.render || this.render;this.select = this.options.select || this.select;this.sorter = this.options.sorter || this.sorter;this.source = this.options.source || this.source;if (!this.source.length) {var ajax = this.options.ajax;if (typeof ajax === 'string') {this.ajax = $.extend({}, $.fn.typeahead.defaults.ajax, { url: ajax });} else {this.ajax = $.extend({}, $.fn.typeahead.defaults.ajax, ajax);}if (!this.ajax.url) {this.ajax = null;}}this.listen();}Typeahead.prototype = {constructor: Typeahead,//=============================================================================================================//// Utils////=============================================================================================================//------------------------------------------------------------------//// Check if an event is supported by the browser eg. 'keypress'// * This was included to handle the "exhaustive deprecation" of jQuery.browser in jQuery 1.8//eventSupported: function (eventName) {var isSupported = (eventName in this.$element);if (!isSupported) {this.$element.setAttribute(eventName, 'return;');isSupported = typeof this.$element[eventName] === 'function';}return isSupported;},//=============================================================================================================//// AJAX////=============================================================================================================//------------------------------------------------------------------//// Handle AJAX source //ajaxer: function () {var that = this,query = that.$element.val();if (query === that.query) {return that;}// Query changedthat.query = query;// Cancel last timer if setif (that.ajax.timerId) {clearTimeout(that.ajax.timerId);that.ajax.timerId = null;}if (!query || query.length < that.ajax.triggerLength) {// Cancel the ajax callback if in progressif (that.ajax.xhr) {that.ajax.xhr.abort();that.ajax.xhr = null;that.ajaxToggleLoadClass(false);}return that.shown ? that.hide() : that;}// Query is good to send, set a timerthat.ajax.timerId = setTimeout(function () {$.proxy(that.ajaxExecute(query), that)}, that.ajax.timeout);return that;},//------------------------------------------------------------------//// Execute an AJAX request//ajaxExecute: function (query) {this.ajaxToggleLoadClass(true);// Cancel last call if already in progressif (this.ajax.xhr) this.ajax.xhr.abort();var params = this.ajax.preDispatch ? this.ajax.preDispatch(query) : { query: query };var jAjax = (this.ajax.method === "post") ? $.post : $.get;this.ajax.xhr = jAjax(this.ajax.url, params, $.proxy(this.ajaxLookup, this));this.ajax.timerId = null;},//------------------------------------------------------------------//// Perform a lookup in the AJAX results//ajaxLookup: function (data) {var items;this.ajaxToggleLoadClass(false);if (!this.ajax.xhr) return;if (this.ajax.preProcess) {data = this.ajax.preProcess(data);}// Save for selection retreivalthis.ajax.data = data;items = this.grepper(this.ajax.data);if (!items || !items.length) {return this.shown ? this.hide() : this;}this.ajax.xhr = null;return this.render(items.slice(0, this.options.items)).show();},//------------------------------------------------------------------//// Toggle the loading class//ajaxToggleLoadClass: function (enable) {if (!this.ajax.loadingClass) return;this.$element.toggleClass(this.ajax.loadingClass, enable);},//=============================================================================================================//// Data manipulation////=============================================================================================================//------------------------------------------------------------------//// Search source//lookup: function (event) {var that = this,items;if (that.ajax) {that.ajaxer();}else {that.query = that.$element.val();if (!that.query) {return that.shown ? that.hide() : that;}items = that.grepper(that.source);if (!items || !items.length) {return that.shown ? that.hide() : that;}return that.render(items.slice(0, that.options.items)).show();}},//------------------------------------------------------------------//// Filters relevent results //grepper: function (data) {var that = this,items;if (data && data.length && !data[0].hasOwnProperty(that.options.display)) {return null;}items = $.grep(data, function (item) {return that.matcher(item[that.options.display], item);});return this.sorter(items);},//------------------------------------------------------------------//// Looks for a match in the source//matcher: function (item) {return ~item.toLowerCase().indexOf(this.query.toLowerCase());},//------------------------------------------------------------------//// Sorts the results//sorter: function (items) {var that = this,beginswith = [],caseSensitive = [],caseInsensitive = [],item;while (item = items.shift()) {if (!item[that.options.display].toLowerCase().indexOf(this.query.toLowerCase())) {beginswith.push(item);}else if (~item[that.options.display].indexOf(this.query)) {caseSensitive.push(item);}else {caseInsensitive.push(item);}}return beginswith.concat(caseSensitive, caseInsensitive);},//=============================================================================================================//// DOM manipulation////=============================================================================================================//------------------------------------------------------------------//// Shows the results list//show: function () {var pos = $.extend({}, this.$element.offset(), {height: this.$element[0].offsetHeight});this.$menu.css({top: pos.top + pos.height,left: pos.left});this.$menu.show();this.shown = true;return this;},//------------------------------------------------------------------//// Hides the results list//hide: function () {this.$menu.hide();this.shown = false;return this;},//------------------------------------------------------------------//// Highlights the match(es) within the results//highlighter: function (item) {var query = this.query.replace(/[/-/[/]{}()*+?.,///^$|#/s]/g, '//$&');return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {return '<strong>' + match + '</strong>';});},//------------------------------------------------------------------//// Renders the results list//render: function (items) {var that = this;items = $(items).map(function (i, item) {i = $(that.options.item).attr('data-value', item[that.options.val]);i.find('a').html(that.highlighter(item[that.options.display], item));return i[0];});items.first().addClass('active');this.$menu.html(items);return this;},//------------------------------------------------------------------//// Item is selected//select: function () {var $selectedItem = this.$menu.find('.active');this.$element.val($selectedItem.text()).change();this.options.itemSelected($selectedItem, $selectedItem.attr('data-value'), $selectedItem.text());return this.hide();},//------------------------------------------------------------------//// Selects the next result//next: function (event) {var active = this.$menu.find('.active').removeClass('active');var next = active.next();if (!next.length) {next = $(this.$menu.find('li')[0]);}next.addClass('active');},//------------------------------------------------------------------//// Selects the previous result//prev: function (event) {var active = this.$menu.find('.active').removeClass('active');var prev = active.prev();if (!prev.length) {prev = this.$menu.find('li').last();}prev.addClass('active');},//=============================================================================================================//// Events////=============================================================================================================//------------------------------------------------------------------//// Listens for user events//listen: function () {this.$element.on('blur', $.proxy(this.blur, this)).on('keyup', $.proxy(this.keyup, this));if (this.eventSupported('keydown')) {this.$element.on('keydown', $.proxy(this.keypress, this));} else {this.$element.on('keypress', $.proxy(this.keypress, this));}this.$menu.on('click', $.proxy(this.click, this)).on('mouseenter', 'li', $.proxy(this.mouseenter, this));},//------------------------------------------------------------------//// Handles a key being raised up//keyup: function (e) {e.stopPropagation();e.preventDefault();switch (e.keyCode) {case 40:// down arrowcase 38:// up arrowbreak;case 9:// tabcase 13:// enterif (!this.shown) {return;}this.select();break;case 27:// escapethis.hide();break;default:this.lookup();}},//------------------------------------------------------------------//// Handles a key being pressed//keypress: function (e) {e.stopPropagation();if (!this.shown) {return;}switch (e.keyCode) {case 9:// tabcase 13:// entercase 27:// escapee.preventDefault();break;case 38:// up arrowe.preventDefault();this.prev();break;case 40:// down arrowe.preventDefault();this.next();break;}},//------------------------------------------------------------------//// Handles cursor exiting the textbox//blur: function (e) {var that = this;e.stopPropagation();e.preventDefault();setTimeout(function () {if (!that.$menu.is(':focus')) {that.hide();}}, 150)},//------------------------------------------------------------------//// Handles clicking on the results list//click: function (e) {e.stopPropagation();e.preventDefault();this.select();},//------------------------------------------------------------------//// Handles the mouse entering the results list//mouseenter: function (e) {this.$menu.find('.active').removeClass('active');$(e.currentTarget).addClass('active');}}//------------------------------------------------------------------//// Plugin definition//$.fn.typeahead = function (option) {return this.each(function () {var $this = $(this),data = $this.data('typeahead'),options = typeof option === 'object' && option;if (!data) {$this.data('typeahead', (data = new Typeahead(this, options)));}if (typeof option === 'string') {data[option]();}});}//------------------------------------------------------------------//// Defaults//$.fn.typeahead.defaults = {source: [],items: 8,menu: '<ul class="typeahead dropdown-menu"></ul>',item: '<li><a href="#"></a></li>',display: 'name',val: 'id',itemSelected: function () { },ajax: {url: null,timeout: 300,method: 'post',triggerLength: 3,loadingClass: null,displayField: null,preDispatch: null,preProcess: null}}$.fn.typeahead.Constructor = Typeahead;//------------------------------------------------------------------//// DOM-ready call for the Data API (no-JS implementation)// // Note: As of Bootstrap v2.0 this feature may be disabled using $('body').off('.data-api') // More info here: https://github.com/twitter/bootstrap/tree/master/js//$(function () {$('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {var $this = $(this);if ($this.data('typeahead')) {return;}e.preventDefault();$this.typeahead($this.data());})});}(window.jQuery);

以上所述是小編給大家介紹的BootStrap Typeahead自動補全插件實例代碼 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产沙发| 久久男人的天堂| 神马久久桃色视频| 久久综合久久美利坚合众国| 国产精品日韩专区| 国产精品黄页免费高清在线观看| 久久久久中文字幕2018| 日韩亚洲国产中文字幕| 92国产精品久久久久首页| 成人av色在线观看| 国产主播欧美精品| 亚洲一区二区三区在线免费观看| 欧美中文字幕视频| 66m—66摸成人免费视频| 亚洲国产欧美精品| 日韩中文字幕国产| 操91在线视频| 色播久久人人爽人人爽人人片视av| 国产成人免费av电影| 中文字幕欧美日韩精品| 欧美大胆在线视频| 亚洲九九九在线观看| 亚洲iv一区二区三区| 亚洲色在线视频| 日韩在线中文视频| 亚洲第五色综合网| 欧美日韩国产一区二区三区| 欧美日韩亚洲天堂| 欧美插天视频在线播放| 国产91对白在线播放| 欧美一区视频在线| 一区二区三区久久精品| 国产午夜精品视频免费不卡69堂| 精品国产91乱高清在线观看| 久久青草福利网站| 91在线视频导航| 久久青草福利网站| 亚洲色图美腿丝袜| 亚洲精品电影在线| 91亚洲永久免费精品| 岛国av一区二区| 欧美在线国产精品| 国产亚洲精品va在线观看| 国产精品三级在线| 国产精品www网站| 久久久久久噜噜噜久久久精品| 成人激情视频免费在线| 45www国产精品网站| 国产乱人伦真实精品视频| 中文字幕国产亚洲2019| 欧美国产激情18| 成人激情黄色网| 亚洲一区二区三区四区视频| 日韩中文字幕精品视频| 欧美三级xxx| 国产丝袜一区二区三区免费视频| 国产精品欧美日韩| 亚洲国产欧美一区二区丝袜黑人| 亚洲精品电影网| 精品国产31久久久久久| 国产精品专区一| 久久成年人视频| 成人两性免费视频| 高清欧美一区二区三区| 国产精品自产拍在线观看中文| 成人高清视频观看www| 欧美日韩在线第一页| 日韩av不卡电影| 亚洲国产精品网站| 中日韩美女免费视频网站在线观看| 欧美一区二区.| 91精品免费视频| 亚洲精品美女在线观看| 久久精品电影一区二区| 国产精品999| 2019亚洲男人天堂| 91精品久久久久久久久久| 亚洲色图25p| 2019中文字幕在线观看| 在线观看国产欧美| 欧美激情久久久久久| 黑人巨大精品欧美一区二区| 亚洲天堂av电影| 欧美日本亚洲视频| 国产成人精品亚洲精品| 国产精品欧美日韩一区二区| 黄色成人在线播放| 国产精品美女午夜av| 综合av色偷偷网| 中文字幕精品久久久久| 国内偷自视频区视频综合| 日韩精品中文字幕在线播放| 综合久久五月天| 日韩精品在线观| 亚洲第一综合天堂另类专| 国产综合在线看| 国产精品久久一区| 欧美丰满片xxx777| 97人人爽人人喊人人模波多| 韩国视频理论视频久久| 久久久久亚洲精品成人网小说| 欧美黄色三级网站| 精品国产乱码久久久久久天美| 国产日韩欧美另类| 亚洲一区二区三区毛片| 欧美猛男性生活免费| yellow中文字幕久久| 色999日韩欧美国产| 国产成人精品免费视频| 日韩精品小视频| 国产精品一香蕉国产线看观看| 91精品国产色综合久久不卡98口| 久久久在线免费观看| 成人欧美一区二区三区在线湿哒哒| 欧美午夜xxx| 久久露脸国产精品| 亚洲国产成人久久综合一区| 欧美主播福利视频| 日韩精品中文字幕久久臀| 一区二区三区精品99久久| 久久成人国产精品| 亚洲天堂成人在线视频| 亚洲精品电影在线观看| 国产精品人成电影| www.久久色.com| 91精品91久久久久久| 亚洲精品中文字幕有码专区| 久热精品视频在线观看| 欧美性少妇18aaaa视频| 日韩免费视频在线观看| 在线亚洲男人天堂| 久久全球大尺度高清视频| 国产一区二区三区在线播放免费观看| 久久精品99无色码中文字幕| 17婷婷久久www| 欧美精品福利视频| 亚洲欧美日韩高清| 夜夜嗨av色综合久久久综合网| 91麻豆国产语对白在线观看| 777国产偷窥盗摄精品视频| 国产精品旅馆在线| 成人精品网站在线观看| 热门国产精品亚洲第一区在线| 国产欧美 在线欧美| 国产女人精品视频| 国产精品欧美激情在线播放| 国产精品极品在线| 日本亚洲欧洲色α| 欧洲成人在线视频| 国产精品青青在线观看爽香蕉| 亚洲第一天堂无码专区| 亚洲国产精品久久久久| 国产精品视频免费在线观看| 国产精品久久久久久久久免费看| 国产美女扒开尿口久久久| 亚洲午夜av久久乱码| 欧美激情一区二区三区在线视频观看| 日韩影视在线观看| 91精品视频免费| 亚洲欧美国产一区二区三区| 亚洲欧美中文日韩在线v日本| 欧美激情综合亚洲一二区| 97久久精品人搡人人玩| 欧美成aaa人片免费看|