javascript - 如何使用带有文本输入的 Javascript 检查数组中的值

标签 javascript arrays regex

我想使用文本输入检查数组中的值。如果该值存在于数组中,我想向用户显示文本。

我的问题: 有没有办法不使用 jQuery?

这是我现在所做的: http://jsfiddle.net/t8r5eLxb/

$(document).ready(function(){
    var recherche ="";
    var liste = ["Ariat", "Wrangler", "turtles"];
    var sorted = [];
    for (var i = 0; i < liste.length; i++) {
        sorted.push(liste[i].toLowerCase());
    }
    sorted.sort();


$("#filter").keyup(function(){
    var recherche = $(this).val();

// Résultat
var resultat = (sorted.indexOf(recherche.toLowerCase()) > -1);

    if( $(resultat).text().search(new RegExp(filter, "i")) < 0 ){
        $('#resultat').fadeIn();
    }
    else{
        $('#resultat').fadeOut();
    } 

});
});

<form id="live-search" action="" method="post">
   <fieldset>
       <input type="text" class="text-input" id="filter" value="" />
   </fieldset>
</form>
<div id="resultat">Vrai</div>

最佳答案

当然你可以避免使用 jQuery,它也是用纯 JavaScript 编写的。

由于您只需要检查输入文本是否与预定义数组中的任何字符串匹配,因此您可以绕过排序操作并直接进行比较。

纯JS中存在一些事件处理程序,例如onkeyup ,这对于输入检索非常方便。

淡入淡出效果可以通过CSS过渡和不透明度来渲染,如<style>所示部分。 JS函数根据匹配结果为div分配不同的className。

以下代码已在Chrome浏览器中测试,应该满足您的要求。

<!DOCTYPE html>
<html>
<head>
    <style>
        .fadeOut {opacity: 0; color:red;}
        .fadeIn {opacity: 1; color:green;}
        #resultat {
            font-size: 20px;
            -webkit-transition: opacity 1s ease-in-out;
            -moz-transition: opacity 1s ease-in-out;
            -o-transition: opacity 1s ease-in-out;
            -ms-transition: opacity 1s ease-in-out;
            transition: opacity 1s ease-in-out;}
    </style>
</head>
<body>
    <form id="live-search" action="" method="post">
        <fieldset>
            <input type="text" id="filter" value="">
        </fieldset>
    </form>
    <div id="resultat" class="fadeOut">Vrai</div>
    <script>
        function test(){
            var liste = ["Ariat", "Wrangler", "turtles"];
            var filter = document.getElementById('filter');
            var resultat = document.getElementById('resultat');

            filter.onkeyup = function(event){
                var recherche = event.target.value;
                var match = false;

                for(var i in liste){
                    if(liste[i] == recherche) match = true;
                }

                if(match){
                    resultat.className = 'fadeIn';
                }
                else{
                    resultat.className = 'fadeOut';
                }
            };
        };
        test();
    </script>
</body>
</html>

<form>实际上,这个演示中的标签并不是必需的。你可以保留<input><div>标签并得到相同的结果。

关于javascript - 如何使用带有文本输入的 Javascript 检查数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969062/

相关文章:

javascript - 向上/向下箭头滚动不起作用

javascript - 在 Raphael 中绘制一半的贝塞尔路径

javascript - 为什么 Javascript string.replace ("\n\t","xxx") 将 "\n\t"替换为 "\nxxx"?

php - 正则表达式到 "normalize"使用 SPACE 之后。 , : chars (and some exceptions)

javascript - Angular TypeScript 服务未定义

javascript - JS/CSS - 在页面上围绕其原始位置移动字母

JAVA : time factor regarding Array Dimension

javascript - 在 ReactJS 中遇到多个事件状态的问题

javascript - 将字符串转换为数组,删除 + 字符

php - 用非字母数字重复清理字符串