予測変換しつつ、要素を足したり消したりします。
都道府県を入力して見て下さい。
予測が表示されるので何か選択します
「、」または「,」を押すと要素が増えます
増えた要素は×を押すと消されます
都道府県を入力して見て下さい。
予測が表示されるので何か選択します
「、」または「,」を押すと要素が増えます
増えた要素は×を押すと消されます
Sample
今回は×をAdd-Clear
というJqueryのplug-inを使用してますが、少し手を加えてます
内容を消すのではなく要素を消したり、closeSymbolの変更、常時表示等に変更してます
Firefoxは微妙に「、」での追加が動作しないですが半角「,」なら大丈夫です
safari(iOS)は例のごとく未確認です。
内容を消すのではなく要素を消したり、closeSymbolの変更、常時表示等に変更してます
Firefoxは微妙に「、」での追加が動作しないですが半角「,」なら大丈夫です
safari(iOS)は例のごとく未確認です。
HTMLです。要素追加のためにulが要ります。
<ul> <div id="jquery-ui-autocomplete" class="ui-widget"> <label for="jquery-ui-autocomplete-label">To:</label> <input id="mailto1" class="mailto" placeholder = "名前またはアドレスを入力して下さい"> <span id="close1" class="close" title="Close" onclick="adclear()">×</span> </input> </div> </ul>
addclear.jsの重要な変更点である要素削除の所だけ書きます
元々はクリックされた場合にテキストがクリアされる関数でした。
$("a[href='#clear']").click(function(e) { $(this).parent(me.element).remove(); $(this).remove(); e.preventDefault(); });
次はメインのjsです
//JQuery必須です。 <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js'></script> <script src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js'></script> <link href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css' rel='stylesheet'> <script src="../jquery/addclear.min.js"></script> //追加要素id用INDEX var index = 1; //×押下時クリア function adclear() { var objmail = $("#mailto1"); objmail.val(""); } $(function () { var data = ["北海道(hokkaido.1@gmail.com)", "青森県(aomori.2@gmail.com)", "沖縄県(okinawa.7@gmail.com)"]; prediction(data); //予測変換 function prediction(result) { var ArrData = [""]; for (var i = 0; i < result.length; i++) { //var arr = [result[i]]; var num = ArrData.push(result[i]); } var word = []; for (var i = 0; i < ArrData.length; i++) { word.push(String(ArrData[i])); } var pin = word; $("#mailto1").autocomplete({ source: pin }); } //要素追加処理 $("#mailto1").on("keyup", function (e) { if (e.keyCode === 188) { var data1 = $("#mailto1").val(); if (data1.indexOf("、") !== -1) { data1 = data1.replace(/、/g,','); $("#mailto1").val(data1); //return true; } if ((data1 !== "") && (data1.length > 1)) { e.keyCode = 0; data1 = data1.replace(/,/g,''); if (data1!=="") { index++; //必要幅取得 var wid = fncStrCount(data1); wid = (wid / 2) + 3.5; //タグエスケープをしておく data1 = escapeHtml(data1); //要素追加 $('ul').append(''); var $mails = $('#mailto' + index); //幅設定 $mails.width(wid + 'em'); //追加要素へCSS反映 $('#mailto' + index).addClass('ui-autocompletelto'); $("#mailto1").val(""); $mails.addClear(); } } } }); }) //全角2半角1で数える function fncStrCount(str) { len = 0; str = escape(str); for (i=0;i<str.length;i++,len++) { if (str.charAt(i) == "%") { if (str.charAt(++i) == "u") { i += 3; len++; } i++; } } return len; } //タグエスケープ function escapeHtml(content) { return content .replace(/&/g, '&') .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, '"') .replace(/'/g, ''') .replace(/\r?\n/g, "<br />"); }
cssは特に変わったことはしてません
.ui-widget { font-family: 'ヒラギノ角ゴ ProN W3', 'メイリオ', 'Noto Sans Japanese', sans-serif; font-size: 13px; margin-left: -24px; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: 'ヒラギノ角ゴ ProN W3', 'メイリオ', 'Noto Sans Japanese', sans-serif; font-size: 13px; } .ui-autocomplete { max-height: 200px; overflow-y: auto; overflow-x: hidden; font-family: 'ヒラギノ角ゴ ProN W3', 'メイリオ', 'Noto Sans Japanese', sans-serif; font-size: 13px; } .mailto { margin-left: 5px; font-size: 13px; width: 350px; margin-top: 5px; font-family: 'ヒラギノ角ゴ ProN W3', 'メイリオ', 'Noto Sans Japanese', sans-serif; } .mailto:hover + .close { display: inline-block; } .close { display: none; color: #585858; cursor: pointer; font-size: 13px; height: 16px; line-height: 16px; text-align: center; top: 1px; position: relative; right: 25px; width: 16px; } .close:hover { display: inline-block; } .waku { display: inline-block; } /*リスト系*/ ul { line-height: 1em; }