ÿØÿàJFIFxxÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ(function($) { /* * 検索機能付ã セレクトボックス * * Copyright (c) 2020 iseyoshitaka */ $.fn.searchBox = function(opts) { // 引数ã«å€¤ãŒå­˜åœ¨ã™ã‚‹å ´åˆã€ãƒ‡ãƒ•ォルト値を上書ãã™ã‚‹ var settings = $.extend({}, $.fn.searchBox.defaults, opts); var init = function (obj) { var self = $(obj), parent = self.closest('div,tr'), searchWord = ''; // çµžã‚Šè¾¼ã¿æ–‡å­—列 // çµžã‚Šè¾¼ã¿æ¤œç´¢ç”¨ã®ãƒ†ã‚­ã‚¹ãƒˆå…¥åŠ›æ¬„ã®è¿½åŠ  self.before(''); var refineText = parent.find('.refineText'); if (settings.mode === MODE.NORMAL) { refineText.attr('readonly', 'readonly'); } // åˆæœŸè¡¨ç¤ºã§é¸æŠžæ¸ˆã¿ã®å ´åˆã€çµžã‚Šè¾¼ã¿æ–‡è¨€å…¥åŠ›æ¬„ã«é¸æŠžæ¸ˆã¿ã®æ–‡è¨€ã‚’表示 var selectedOption = self.find('option:selected'); if(selectedOption){ refineText.val(selectedOption.text()); if (selectedOption.val() === '') { if (settings.mode === MODE.TAG) { refineText.val(""); } } } // セレクトボックスã®ä»£ã‚りã«è¡¨ç¤ºã™ã‚‹ãƒ€ãƒŸãƒ¼ãƒªã‚¹ãƒˆã‚’ä½œæˆ var visibleTarget =self.find('option').map(function(i, e) { return '
  • ' + $(e).text() + '
  • '; }).get(); self.after($('').hide()); // ダミーリストã®è¡¨ç¤ºå¹…をセレクトボックスã«ã‚ã‚ã›ã‚‹ var refineTextWidth = (settings.elementWidth) ? settings.elementWidth : self.width(); refineText.css('width', refineTextWidth); parent.find('.searchBoxElement').css('width', refineTextWidth); // å…ƒã®ã‚»ãƒ¬ã‚¯ãƒˆãƒœãƒƒã‚¯ã‚¹ã¯éžè¡¨ç¤ºã«ã™ã‚‹ self.hide(); // ダミーリストを検索æ¡ä»¶ã§çµžã‚Šè¾¼ã¿ã¾ã™ã€‚ var changeSearchBoxElement = function() { if (searchWord !== '') { var matcher = new RegExp(searchWord.replace(/\\/g, '\\\\'), "i"); var filterTarget = $(visibleTarget.join()); // é…列ã®ã‚³ãƒ”ー filterTarget = filterTarget.filter(function(){ return $(this).text().match(matcher); }); parent.find('.searchBoxElement').empty(); parent.find('.searchBoxElement').html(filterTarget); parent.find('.searchBoxElement').show(); } else { parent.find('.searchBoxElement').empty(); parent.find('.searchBoxElement').html(visibleTarget.slice(0, settings.optionMaxSize).join('')); parent.find('.searchBoxElement').show(); } // é¸æŠžä¸­ã®LIã‚¿ã‚°ã®èƒŒæ™¯è‰²ã‚’変更ã—ã¾ã™ã€‚ var selectedOption = self.find('option:selected'); if(selectedOption){ parent.find('.searchBoxElement').find('li').removeClass('selected'); parent.find('.searchBoxElement').find('li[data-searchval="' + selectedOption.val() + '"]').addClass('selected'); } // ãƒ€ãƒŸãƒ¼ãƒªã‚¹ãƒˆé¸æŠžæ™‚ parent.find('.searchBoxElement').find('li').click(function(e){ e.preventDefault(); // e.stopPropagation(); var li = $(this), searchval = li.data('searchval'); self.val(searchval).change(); parent.find('li').attr('data-selected', 'off'); li.attr('data-selected', 'on'); }); }; // keyup時ã®ãƒ•ァンクション refineText.keyup(function(e){ searchWord = $(this).val(); // ダミーリストをリフレッシュ changeSearchBoxElement(); }); // セレクトボックス変更時 self.change(function(){ // ç›´è¿‘ã®çµžã‚Šè¾¼ã¿æ–‡è¨€ã‚¨ãƒªã‚¢ã¸é¸æŠžã‚ªãƒ—ションã®ãƒ†ã‚­ã‚¹ãƒˆã‚’åæ˜  var selectedOption = $(this).find('option:selected'); searchWord = selectedOption.text(); refineText.val(selectedOption.text()); if (settings.selectCallback) { settings.selectCallback({ selectVal: selectedOption.attr('value'), selectLabel: selectedOption.text() }); } }); // テキストボックスをクリックã—ãŸå ´åˆã¯ãƒ€ãƒŸãƒ¼ãƒªã‚¹ãƒˆã‚’表示ã™ã‚‹ refineText.click(function(e) { e.preventDefault(); // モードã«åˆã‚ã›ã¦è¨­å®š if (settings.mode === MODE.NORMAL) { searchWord = ''; } else if (settings.mode === MODE.INPUT) { refineText.val(''); searchWord = ''; } else if (settings.mode === MODE.TAG) { var selectedOption = self.find('option:selected'); if (selectedOption.val() === '') { refineText.val(''); searchWord = ''; } } // ダミーリストをリフレッシュ parent.find('.searchBoxElement').hide(); changeSearchBoxElement(); }); // セレクトボックスã®å¤–をクリックã—ãŸå ´åˆã¯ãƒ€ãƒŸãƒ¼ãƒªã‚¹ãƒˆã‚’éžè¡¨ç¤ºã«ã™ã‚‹ã€‚ $(document).click(function(e){ if($(e.target).hasClass('refineText')){ return; } parent.find('.searchBoxElement').hide(); if (settings.mode !== MODE.TAG) { var selectedOption = self.find('option:selected'); searchWord = selectedOption.text(); refineText.val(selectedOption.text()); } }); } $(this).each(function (){ init(this); }); return this; } var MODE = { NORMAL: 0, // 通常ã®ã‚»ãƒ¬ã‚¯ãƒˆãƒœãƒƒã‚¯ã‚¹ INPUT: 1, // 入力å¼ã‚»ãƒ¬ã‚¯ãƒˆãƒœãƒƒã‚¯ã‚¹ TAG: 2 // タグ追加å¼ã‚»ãƒ¬ã‚¯ãƒˆãƒœãƒƒã‚¯ã‚¹ }; $.fn.searchBox.defaults = { selectCallback: null, // é¸æŠžå¾Œã«å‘¼ã°ã‚Œã‚‹ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ elementWidth: null, // セレクトボックスã®è¡¨ç¤ºå¹… optionMaxSize: 100, // セレクトボックス内ã«è¡¨ç¤ºã™ã‚‹æœ€å¤§æ•° mode: MODE.INPUT // 表示モード }; })(jQuery);