2017-06-20 13 views
0

InputFilterを作成します。ここに私のコードです。入力タグでリスト項目を選択する方法

MyFilter = function(args) { 
    var dataUrl = args.url; 
    var divID = args.divID; 
    var div = document.getElementById(divID); 
    //var input = '<input type="text" id="myInput" onclick="myFunction()" title="Type in a name">'; 
    var myTable = '<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name">' + 
     '<ul id="myUL">' + '<li>' + '<a href="#"></a>' + '</li>' + '</ul>'; 
    div.innerHTML = myTable; 

    function foo(callback) { 
     var httpRequest = new XMLHttpRequest(); 
     httpRequest.open('GET', "data.json", true); 
     httpRequest.onreadystatechange = function() { 
      if (httpRequest.readyState === XMLHttpRequest.DONE && httpRequest.status === 200) { 
       callback(httpRequest.responseText); 
      } 
     }; 
     httpRequest.send(); 
    } 

    foo(function(data) { 
     debugger; 
     var jsonc = JSON.parse(data); 
     var new_opt = ""; 
     for (i = 0; i < jsonc.length; i++) { 
      new_opt += '<li><a href="#">' + jsonc[i]['VALUE'] + '</a></li>'; 
     } 
     document.getElementById('myUL').innerHTML = new_opt; 

    }); 

    myFunction = function() { 
     debugger; 
     var input, filter, ul, li, a, i; 
     input = document.getElementById("myInput"); 
     filter = input.value.toUpperCase(); 
     ul = document.getElementById("myUL"); 
     li = ul.getElementsByTagName("li"); 
     for (i = 0; i < li.length; i++) { 
      a = li[i].getElementsByTagName("a")[0]; 
      if (a.innerHTML.toUpperCase().indexOf(filter) > -1) { 
       li[i].style.display = ""; 
      } else { 
       li[i].style.display = "none"; 

      } 
     } 
    } 
} 

リストアイテムをクリックすると、これらのアイテムが選択され、コンボボックスのように入力フィールドに表示されます。

どうすればいいですか?

ここは私のフィドラーです。 JS FIDDLE

:現在私のコードで私は、私が選択した入力で表示したい場合は、検索することができています。

他のプロジェクトでも起こっていますが、そこにはテーブルを使用しています。そのため

コードは、私がaタグの項目と選択項目;分離によってinputタグに表示するをクリックします

document.querySelectorAll('#myTable tr:not(.header)').forEach(function(_tr) { 
      _tr.addEventListener('click', function() { 
       document.getElementById('myInput').value += " ; " + this.getElementsByTagName('td')[0].textContent; 
      }); 
     }); 

です。

+0

'Inputfield'を定義しています... – vsync

+0

@vsyncこれは、入力を与えることができる入力タグです。 – David

+0

タイトルは非常に不明です。 UXの面で何をしたいのかというイラストを投稿すれば、助けてくれたでしょう – vsync

答えて

1

Playground

function filterList(value, list) { 
 
    var li, i, match; 
 
    
 
    for (i = list.children.length; i--;) { 
 
     li = list.children[i]; 
 
     match = li.textContent.toLowerCase().indexOf(value.toLowerCase()) > -1; 
 
     li.classList.toggle('hidden', !match) 
 
    } 
 
} 
 

 
function selectItem(input, value){ 
 
\t input.value = value; 
 
} 
 

 

 
var input = document.querySelector('input'), 
 
\t list = document.querySelector("#myUL"); 
 

 
input.addEventListener('input', function(e){ 
 
\t filterList(e.target.value, list); 
 
}) 
 
list.addEventListener('click', function(e){ 
 
\t if(e.target.tagName == 'A' && !e.target.classList.contains('header')) 
 
\t \t selectItem(input, e.target.textContent) 
 
})
* { 
 
    box-sizing: border-box; 
 
} 
 

 
input { 
 
    background-image: url('/css/searchicon.png'); 
 
    background-position: 10px 12px; 
 
    background-repeat: no-repeat; 
 
    width: 100%; 
 
    font-size: 16px; 
 
    padding: 12px 20px 12px 40px; 
 
    border: 1px solid #ddd; 
 
    margin-bottom: 12px; 
 
} 
 

 
#myUL { 
 
    list-style-type: none; 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
#myUL li a { 
 
    border: 1px solid #ddd; 
 
    margin-top: -1px; /* Prevent double borders */ 
 
    background-color: #f6f6f6; 
 
    padding: 12px; 
 
    text-decoration: none; 
 
    font-size: 18px; 
 
    color: black; 
 
    display: block 
 
} 
 

 
#myUL li.hidden{ display:none; } 
 

 
#myUL li a.header { 
 
    background-color: #e2e2e2; 
 
    cursor: default; 
 
} 
 

 
#myUL li a:hover:not(.header) { 
 
    background-color: #eee; 
 
}
<h2>My Phonebook</h2> 
 

 
<input placeholder="Search for names.." title="Type in a name"> 
 

 
<ul id="myUL"> 
 
    <li><a href="#" class="header">A</a></li> 
 
    <li><a href="#">Adele</a></li> 
 
    <li><a href="#">Agnes</a></li> 
 

 
    <li><a href="#" class="header">B</a></li> 
 
    <li><a href="#">Billy</a></li> 
 
    <li><a href="#">Bob</a></li> 
 

 
    <li><a href="#" class="header">C</a></li> 
 
    <li><a href="#">Calvin</a></li> 
 
    <li><a href="#">Christina</a></li> 
 
    <li><a href="#">Cindy</a></li> 
 
</ul>
に記入選択した名前を設定することができますjqueryのを使用して、この1

を試してみてください3210

+0

ありがとう、私が作成した複数の選択のために私は' input.value + = value; 'を使用しています。入力タグのクリックでliを隠す。 – David

+0

申し訳ありませんが、私は質問を理解していない..入力をクリックどこ?それは何を表示するか隠すか?あなたは説明していない – vsync

+0

今すぐリストが入力タグの真下に表示されています。私は入力タグをクリックするだけで表示したい。 – David

1

あなたはtextfield

function myFunction() { 
 
    var input, filter, ul, li, a, i; 
 
    input = document.getElementById("myInput"); 
 
    filter = input.value.toUpperCase(); 
 
    ul = document.getElementById("myUL"); 
 
    li = ul.getElementsByTagName("li"); 
 
    for (i = 0; i < li.length; i++) { 
 
    a = li[i].getElementsByTagName("a")[0]; 
 
    if (a.innerHTML.toUpperCase().indexOf(filter) > -1) { 
 
     li[i].style.display = ""; 
 
    } else { 
 
     li[i].style.display = "none"; 
 

 
    } 
 
    } 
 
} 
 
$('a').click(function() { 
 
    var val = $(this).text(); 
 
    $('#myInput').val(val); 
 
})
* { 
 
    box-sizing: border-box; 
 
} 
 

 
#myInput { 
 
    background-image: url('/css/searchicon.png'); 
 
    background-position: 10px 12px; 
 
    background-repeat: no-repeat; 
 
    width: 100%; 
 
    font-size: 16px; 
 
    padding: 12px 20px 12px 40px; 
 
    border: 1px solid #ddd; 
 
    margin-bottom: 12px; 
 
} 
 

 
#myUL { 
 
    list-style-type: none; 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
#myUL li a { 
 
    border: 1px solid #ddd; 
 
    margin-top: -1px; 
 
    /* Prevent double borders */ 
 
    background-color: #f6f6f6; 
 
    padding: 12px; 
 
    text-decoration: none; 
 
    font-size: 18px; 
 
    color: black; 
 
    display: block 
 
} 
 

 
#myUL li a.header { 
 
    background-color: #e2e2e2; 
 
    cursor: default; 
 
} 
 

 
#myUL li a:hover:not(.header) { 
 
    background-color: #eee; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h2>My Phonebook</h2> 
 

 
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name"> 
 

 
<ul id="myUL"> 
 
    <li><a href="#" class="header">A</a></li> 
 
    <li><a href="#">Adele</a></li> 
 
    <li><a href="#">Agnes</a></li> 
 

 
    <li><a href="#" class="header">B</a></li> 
 
    <li><a href="#">Billy</a></li> 
 
    <li><a href="#">Bob</a></li> 
 

 
    <li><a href="#" class="header">C</a></li> 
 
    <li><a href="#">Calvin</a></li> 
 
    <li><a href="#">Christina</a></li> 
 
    <li><a href="#">Cindy</a></li> 
 
</ul>

+0

jqueryを使用せずにできますか?私がテーブルを使っている他のプロジェクトで起こっているので。私は別のCSSを使用しています。私は私の質問を更新しました。可能であれば、 – David

+0

に完全なコードを入力してください。 – Bhargav

+0

あなたはJSのデータをJSフィドルに与える方法を知っていますか?私は働くコードを作ろうと思います。 – David

関連する問題