(function ($) {
$.suggest = function (input, options) {
var $input = $(input).attr("autocomplete", "off");
var $results;
var timeout = false; // hold timeout ID for suggestion results to appear
var prevLength = 0; // last recorded length of $input.val()
var cache = []; // cache MRU list
var cacheSize = 0; // size of cache in chars (bytes?)
//if($.trim($input.val())=='' || $.trim($input.val())=='中文/拼音') $input.val('中文/拼音').css('color','#aaa');
// if (!options.attachObject)
// options.attachObject = $(document.createElement("div")).appendTo('body');
$results = $("#suggestDiv");
$results.addClass(options.resultsClass);
resetPosition();
$(window)
.load(resetPosition) // just in case user is changing size of page while loading
.resize(resetPosition);
document.onclick = function (e) {
var theEvent = window.event || e;
var srcElement = theEvent.srcElement;
if (!srcElement) {
srcElement = theEvent.target;
}
if (srcElement !== $input[0] && srcElement !== $results[0]) setTimeout(function () { $results.hide() }, 200);
}
// $input.focus(function () {
// // if($.trim($(this).val())=='中文/拼音'){
// // $(this).val('').css('color','#000');
// // }
// if ($.trim($(this).val()) != '') {
// displayItems($(this).val()); //显示热门城市列表
// }
// });
$input.click(function () {
var q = $.trim($(this).val());
displayItems(q);
// $(this).select();
});
// help IE users if possible
try {
$results.bgiframe();
} catch (e) { }
$input.keydown(updownShow)
$input.keyup(processKey); //
function updownShow(e) {
var ul = $("#suggest");
var liSet = ul.children('li');
if (e.keyCode === 38 || e.keyCode === 40) {
if (ul.css('display') === "block") {
for (var i = 0, len = liSet.length; i < len; i++) {
if (liSet[i].className === 'ac_over') {
break;
}
}
if (i === len) {
liSet[0].className = 'ac_over';
$input.val($(liSet[0]).text());
} else {
liSet[i].className = '';
if (e.keyCode === 40) {
i = ++i % len;
liSet[i].className = 'ac_over';
fixScrollPos(i);
} else {
i = (--i + len) % len;
liSet[i].className = 'ac_over';
e.preventDefault();
fixScrollPos(i);
}
}
}
}
}
function fixScrollPos(pos) {
var ul = $("#suggest");
var liSet = ul.children('li');
var sTop = ul.scrollTop();
var viewHeight = ul.height();
var sBottom = sTop + viewHeight;
var itemHeight = liSet[0].offsetHeight;
var liPos = pos * itemHeight;
if (liPos >= sBottom) {
ul.scrollTop(liPos - (viewHeight - itemHeight));
} else if (liPos < sTop) {
ul.scrollTop(liPos);
}
liSet[pos].className = 'ac_over';
$input.val($(liSet[pos]).text());
}
function resetPosition() {
// requires jquery.dimension plugin
var offset = $input.offset();
$results.css({
top: (offset.top + input.offsetHeight) + 'px',
left: offset.left + 'px'
});
}
function processKey(e) {
// handling up/down/escape requires results to be visible
// handling enter/tab requires that AND a result to be selected
if ((/27$|38$|40$/.test(e.keyCode) && $results.is(':visible')) ||
(/^13$|^9$/.test(e.keyCode) && getCurrentResult())) {
if (e.preventDefault)
e.preventDefault();
if (e.stopPropagation)
e.stopPropagation();
e.cancelBubble = true;
e.returnValue = false;
switch (e.keyCode) {
// case 38: // up
// prevResult();
// break;
// case 40: // down
// nextResult();
// break;
case 13: // return
selectCurrentResult();
break;
case 27: // escape
$results.hide();
break;
}
} else if ($input.val().length != prevLength) {
if (timeout)
clearTimeout(timeout);
timeout = setTimeout(suggest, options.delay);
prevLength = $input.val().length;
}
}
function suggest() {
var q = $.trim($input.val());
displayItems(q);
}
function displayItems(items) {
if ($("#allInOne").val() != "")
$("#cityPlace").hide();
var html = '';
if (items == '') {
$results.hide();
return false;
}
else {
var mydata = null;
var data = [];
data.push({ name: "name", value: items });
data.push({ name: "cityName", value: $("#cityCode").attr('cityName') });
data.push({ name: "cityCode", value: $("#cityCode").val() });
$.ajax({
url: options.url,
data: data,
type: 'post',
dataType: 'json',
success: function (objdata) {
var html=objdata;//objdata:ajax请求数据
var suggest_tip = "";
if (html == '') {
suggest_tip = '<div class="gray ac_result_tipno">对不起,找不到数据:' + items + '</div>';
}
else {
suggest_tip = '<div class="gray ac_result_tip">' + items + ',按数据类型排序</div>';
}
html = suggest_tip + '<ul id="suggest" style="height:260px;overflow-y:auto;overflow-x:hidden;display:block;">' + html + '</ul>';
$results.html(html).show();
$results.children('ul').children('li:first-child').addClass(options.selectClass);
$results.children('ul')
.children('li')
.mouseover(function () {
$results.children('ul').children('li'
评论5
最新资源