JavaScriptはメールボックスのヒントを実現します.
4605 ワード
// -> -> ->
function $(id) {
return document.getElementById(id);
}
input_obj = $('email-input');
var ulNode = $('email-sug-wrapper');
function get_input() {// input
return input_obj.value.trim();//trim
}
function gen_prompt(value){// ,
var postfixList = ['163.com', 'gmail.com', '126.com', 'qq.com', '263.net'];
var postfixListFilter = [];
var right_value = '';
if(value.indexOf('@')!==-1) {
right_value = value.substring(value.indexOf('@')+1);
value = value.substring(0, value.indexOf('@'));// @
}
if(right_value!==''){
var ptn = new RegExp('^'+right_value);
postfixListFilter = postfixList.filter(function (item) {
return ptn.test(item);
});
}
if(postfixListFilter.length!==0)
postfixList = postfixListFilter;
return postfixList.map(function (p) {
return value+'@'+p;
});
}
function add_prompt(ar) {// ,
var email_wraper = $('email-sug-wrapper');
function gen_item_li(item) {
var para = document.createElement('li');
para.innerText = item;
return para;
}
email_wraper.innerHTML='';
ar.forEach(function (item) {
var item_li = gen_item_li(item);
email_wraper.appendChild(item_li);
});
ulNode.firstChild.classList.add('checked');
}
function toggle_window(){
var wrap_obj = $('email-sug-wrapper');
function show_window() {
wrap_obj.style.display = 'block';
}
function close_window() {
wrap_obj.style.display = 'none';
}
if (get_input()!=='')
show_window();
else
close_window();
}
// function resetCheck(){
// // var lis = document.getElementById('email-sug-wrapper').getElementsByTagName('li');
// // var i;
// // for(i = 0;i<lis.length;i++)
// // if(lis[i].className.search('checked')!==-1 ) break;
// // if(i!==lis.length)
// // if(i!==0){
// // lis[i].classList.remove('checked');
// // lis[0].classList.add('checked');
// // }
// var checkedLi = document.getElementsByClassName('checked');
// console.log(checkedLi);
// console.log(ulNode.firstChild);
// console.log(checkedLi===ulNode.firstChild);
// if (Boolean(checkedLi))
// if(checkedLi!==ulNode.firstChild){
// checkedLi.classList.remove('checked');
// }
// ulNode.firstChild.classList.add('checked');
// }
input_obj.onkeydown = function (e) {
kCode = e.keyCode;
if ((kCode!==13&&kCode!==38&&kCode!==40)) {// ,up,down
add_prompt(gen_prompt(get_input()));
toggle_window();
}
else{
var checkLi = document.getElementsByClassName('checked')[0];
checkLi.classList.remove('checked');
if(kCode===38){
if(checkLi===ulNode.firstChild)
ulNode.lastChild.classList.add('checked');
else checkLi.previousSibling.classList.add('checked');
}
if(kCode===40){
if(checkLi===ulNode.lastChild)
ulNode.firstChild.classList.add('checked');
else checkLi.nextSibling.classList.add('checked');
}
if(kCode===13){
input_obj.value = checkLi.innerHTML;
ulNode.style.display = 'none';
}
}
};
var liNodes = ulNode.getElementsByTagName('li');
ulNode.onclick = function (e) {
input_obj.value = e.target.innerHTML;
this.style.display = 'none';
};
ulNode.onmouseover = function (e) {
checkLi = document.getElementsByClassName('checked')[0];
checkLi.classList.remove('checked');
e.target.classList.add('checked');
}