| | |
| | | // resetの場合true |
| | | // NamaとId ともに変更しない場合true |
| | | // 新しい値設定した場合false |
| | | // reset銇牬鍚坱rue |
| | | // Nama銇↖d 銇ㄣ倐銇鏇淬仐銇亜鍫村悎true |
| | | // 鏂般仐銇勫€よō瀹氥仐銇熷牬鍚坒alse |
| | | function resetValue(htmlId){ |
| | | v = j$(escapeVfId(htmlId)).value(); |
| | | vb = j$(escapeVfId(htmlId + 'Hidden')).value(); |
| | | vid = j$(escapeVfId(htmlId + 'Id')).value(); |
| | | vidb = j$(escapeVfId(htmlId + 'HiddenId')).value(); |
| | | |
| | | // NamaとId ともに変更しない場合 |
| | | |
| | | // Nama銇↖d 銇ㄣ倐銇鏇淬仐銇亜鍫村悎 |
| | | if(v == vb){ |
| | | if(vid == vidb){ |
| | | return true; |
| | |
| | | j$(escapeVfId(htmlId + 'HiddenId')).val(''); |
| | | return false; |
| | | } |
| | | // Id全部空っぽ(つまりsuggestからIdを設定できていない) |
| | | // Id鍏ㄩ儴绌恒仯銇�(銇ゃ伨銈妔uggest銇嬨倝Id銈掕ō瀹氥仹銇嶃仸銇勩仾銇�) |
| | | if(vid == '' && vidb == '') { |
| | | j$(escapeVfId(htmlId)).val(''); |
| | | j$(escapeVfId(htmlId + 'Hidden')).val(''); |
| | | return false; |
| | | } |
| | | // Name全部空っぽ(ありえない) |
| | | // Name鍏ㄩ儴绌恒仯銇�(銇傘倞銇堛仾銇�) |
| | | if(v == '' && vb == '') { |
| | | j$(escapeVfId(htmlId + 'Id')).val(''); |
| | | j$(escapeVfId(htmlId + 'HiddenId')).val(''); |
| | | return false; |
| | | } |
| | | // Id一致Name変更(reset) |
| | | // Id涓€鑷碞ame澶夋洿锛坮eset锛� |
| | | if(vid == vidb){ |
| | | if(v != vb){ |
| | | j$(escapeVfId(htmlId)).val(vb); |
| | | return true; |
| | | } |
| | | } |
| | | // Name一致Id変更(suggest選択) |
| | | // Name涓€鑷碔d澶夋洿锛坰uggest閬告姙锛� |
| | | if(v == vb){ |
| | | if(vid != vidb){ |
| | | j$(escapeVfId(htmlId + 'Hidden')).val(v); |
| | |
| | | return false; |
| | | } |
| | | } |
| | | // Id と Name ともに違う場合 |
| | | // Id 銇� Name 銇ㄣ倐銇仌銇嗗牬鍚� |
| | | j$(escapeVfId(htmlId + 'Hidden')).val(v); |
| | | j$(escapeVfId(htmlId + 'HiddenId')).val(vid); |
| | | return false; |
| | |
| | | |
| | | /* |
| | | * jquery.suggest 1.1 - 2007-08-06 |
| | | * |
| | | * |
| | | * Uses code and techniques from following libraries: |
| | | * 1. http://www.dyve.net/jquery/?autocomplete |
| | | * 2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js |
| | | * 2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js |
| | | * |
| | | * All the new stuff written by Peter Vulgaris (www.vulgarisoip.com) |
| | | * All the new stuff written by Peter Vulgaris (www.vulgarisoip.com) |
| | | * Feel free to do whatever you want with this file |
| | | * |
| | | */ |
| | | |
| | | |
| | | (function($) { |
| | | |
| | | $.suggest = function(input, options) { |
| | | var $input = $(input).attr("autocomplete", "off"); |
| | | var $results = $(document.createElement("ul")); |
| | | |
| | | var timeout = false; // hold timeout ID for suggestion results to appear |
| | | var timeout = false; // hold timeout ID for suggestion results to appear |
| | | var prevLength = 0; // last recorded length of $input.value() |
| | | var cache = []; // cache MRU list |
| | | var beforerequest = null; |
| | |
| | | $input.keypress(processKey); // onkeypress repeats arrow keys in Mozilla/Opera |
| | | else |
| | | $input.keydown(processKey); // onkeydown repeats arrow keys in IE/Safari |
| | | |
| | | |
| | | |
| | | |
| | | function resetPosition() { |
| | |
| | | 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.cancelBubble = true; |
| | | e.returnValue = false; |
| | | |
| | | |
| | | switch(e.keyCode) { |
| | | |
| | | |
| | | case 38: // up |
| | | prevResult(); |
| | | break; |
| | | |
| | | |
| | | case 40: // down |
| | | nextResult(); |
| | | break; |
| | | |
| | | |
| | | case 9: // tab |
| | | case 13: // return |
| | | selectCurrentResult(); |
| | | break; |
| | | |
| | | |
| | | case 27: // escape |
| | | $results.hide(); |
| | | $input.removeAttr("jquerysuggest"); |
| | | break; |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } else if ($input.value().length != prevLength) { |
| | | if (e.keyCode == 9) { |
| | | return; |
| | | } |
| | | if (timeout) |
| | | if (timeout) |
| | | clearTimeout(timeout); |
| | | timeout = setTimeout(suggest, options.delay); |
| | | prevLength = $input.value().length; |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | function suggest() { |
| | | |
| | | |
| | | var q = $.trim($input.value()); |
| | | var qwords = []; |
| | | if (options.minwords > 0 && q.length > 0) { |
| | |
| | | } |
| | | |
| | | if (qwords.length >= options.minwords || q.length >= options.minchars) { |
| | | |
| | | |
| | | // cached = checkCache(q); |
| | | |
| | | |
| | | // if (cached) { |
| | | |
| | | |
| | | // displayItems(cached['items']); |
| | | |
| | | |
| | | // } else { |
| | | if (beforerequest != null) { |
| | | beforerequest.abort(); |
| | |
| | | |
| | | $results.hide(); |
| | | $input.removeAttr("jquerysuggest"); |
| | | |
| | | |
| | | var items = parseTxt(txt, q); |
| | | |
| | | |
| | | displayItems(items); |
| | | // addToCache(q, items, txt.length); |
| | | |
| | | |
| | | }); |
| | | |
| | | |
| | | // } |
| | | |
| | | |
| | | } else { |
| | | $results.hide(); |
| | | $input.removeAttr("jquerysuggest"); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | function checkCache(q) { |
| | | |
| | | for (var i = 0; i < cache.length; i++) |
| | |
| | | cache.unshift(cache.splice(i, 1)[0]); |
| | | return cache[0]; |
| | | } |
| | | |
| | | |
| | | return false; |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | function addToCache(q, items, size) { |
| | | |
| | | while (cache.length && (cacheSize + size > options.maxCacheSize)) { |
| | | var cached = cache.pop(); |
| | | cacheSize -= cached['size']; |
| | | } |
| | | |
| | | |
| | | cache.push({ |
| | | q: q, |
| | | size: size, |
| | | items: items |
| | | }); |
| | | |
| | | |
| | | cacheSize += size; |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | function displayItems(items) { |
| | | if (!items) |
| | | return; |
| | | |
| | | |
| | | if (!items.length) { |
| | | $results.hide(); |
| | | $input.removeAttr("jquerysuggest"); |
| | | return; |
| | | } |
| | | |
| | | |
| | | var html = ''; |
| | | for (var i = 0; i < items.length; i++) |
| | | html += '<li>' + items[i] + '</li>'; |
| | |
| | | $(this).addClass(options.selectClass); |
| | | }) |
| | | .click(function(e) { |
| | | e.preventDefault(); |
| | | e.preventDefault(); |
| | | e.stopPropagation(); |
| | | selectCurrentResult(); |
| | | }); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | function parseTxt(txt, q) { |
| | | |
| | | |
| | | var items = []; |
| | | var tokens = txt.split(options.delimiter); |
| | | |
| | | |
| | | // parse returned data for non-empty items |
| | | for (var i = 0; i < tokens.length; i++) { |
| | | var token = $.trim(tokens[i]); |
| | | if (token) { |
| | | token = token.replace( |
| | | new RegExp(q, 'ig'), |
| | | new RegExp(q, 'ig'), |
| | | function(q) { return '<span class="' + options.matchClass + '">' + q + '</span>' } |
| | | ); |
| | | items[items.length] = token; |
| | | } |
| | | } |
| | | |
| | | |
| | | return items; |
| | | } |
| | | |
| | | |
| | | function getCurrentResult() { |
| | | |
| | | |
| | | if (!$results.is(':visible')) |
| | | return false; |
| | | |
| | | |
| | | var $currentResult = $results.children('li.' + options.selectClass); |
| | | |
| | | |
| | | if (!$currentResult.length) |
| | | $currentResult = false; |
| | | |
| | | |
| | | return $currentResult; |
| | | |
| | | } |
| | | |
| | | |
| | | function selectCurrentResult() { |
| | | $currentResult = getCurrentResult(); |
| | | |
| | | |
| | | if ($currentResult) { |
| | | var $name = $currentResult.children("span.result_name"); |
| | | var $id = $currentResult.children("span.result_id"); |
| | |
| | | |
| | | var idId = $input.attr("id"); |
| | | idId = escapeVfId(idId + "Id"); |
| | | |
| | | |
| | | $(idId).val($id.text()); |
| | | idId = $input.attr("id"); |
| | | // onchangeとonblurは1つしか実装しないと想定、両方呼び出す |
| | | // entryキー対応のため、直接 onchangeとonblurを呼び出す必要です。 |
| | | // onchange銇╫nblur銇紤銇ゃ仐銇嬪疅瑁呫仐銇亜銇ㄦ兂瀹氥€佷浮鏂瑰懠銇冲嚭銇� |
| | | // entry銈兗瀵惧繙銇仧銈併€佺洿鎺� onchange銇╫nblur銈掑懠銇冲嚭銇欏繀瑕併仹銇欍€� |
| | | $input.change(); |
| | | $input.blur(); |
| | | } |
| | | /*------------------------------------------------*/ |
| | | $results.hide(); |
| | | $input.removeAttr("jquerysuggest"); |
| | | |
| | | |
| | | if (options.onSelect) |
| | | options.onSelect.apply($input[0]); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | function nextResult() { |
| | | |
| | | |
| | | $currentResult = getCurrentResult(); |
| | | if ($currentResult) |
| | | $currentResult |
| | |
| | | .addClass(options.selectClass); |
| | | else |
| | | $results.children('li:first-child').addClass(options.selectClass); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | function prevResult() { |
| | | |
| | | |
| | | $currentResult = getCurrentResult(); |
| | | |
| | | |
| | | if ($currentResult) |
| | | $currentResult |
| | | .removeClass(options.selectClass) |
| | |
| | | .addClass(options.selectClass); |
| | | else |
| | | $results.children('li:last-child').addClass(options.selectClass); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | $.fn.suggest = function(source, options) { |
| | | |
| | | |
| | | if (!source) |
| | | return; |
| | | |
| | | |
| | | options = options || {}; |
| | | options.source = source; |
| | | options.delay = options.delay || 100; |
| | |
| | | options.delimiter = options.delimiter || '\n'; |
| | | options.onSelect = options.onSelect || false; |
| | | options.maxCacheSize = options.maxCacheSize || 65536; |
| | | |
| | | |
| | | this.each(function() { |
| | | new $.suggest(this, options); |
| | | }); |
| | | |
| | | |
| | | return this; |
| | | |
| | | |
| | | }; |
| | | |
| | | })(jQuery); |
| | | |
| | | |
| | | })(jQuery); |