予測変換しつつ、要素を足したり消したりします。
都道府県を入力して見て下さい。
予測が表示されるので何か選択します
「、」または「,」を押すと要素が増えます
増えた要素は×を押すと消されます
都道府県を入力して見て下さい。
予測が表示されるので何か選択します
「、」または「,」を押すと要素が増えます
増えた要素は×を押すと消されます
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;
}