【问题标题】:how to get rid of Js Undefined from here?如何从这里摆脱 Js Undefined ?
【发布时间】:2018-02-14 04:33:43
【问题描述】:

my 代码正常,输出进入控制台。但在我的跨度标记结果(名字)中显示未定义。我不明白是什么问题。谁能帮我解决这个问题?我怎样才能摆脱这个问题?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Search Baby name</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>
    <script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.min.js"></script>

</head>
<body>
<div class="first_div" id="div_id">
    <div><p> Baby Names</p></div>
    <div><p> HOW UNIQUE IS YOUR CHILD NAMES IS ?</p></div>
    Enter Full Name : <input type="text" id="input_id" class="input_class">
    <input type="button" class="btn_class" id="btn_id" value="search">
    </br>
    <span id="result">  </span>

</div>
</body>
</html>


<script>
    function insertWord(tree, string) {
        var keys = Object.keys(tree),
            result = keys.some(function (k) {
                    var i = 0;
                    if (string.substr(0, k.length) === k) {
                        string.slice(k.length);
                        return true;
                    }
                    while (k[i] == string[i] && i < k.length) {
                        i++;
                    }
                    if (i) {
                        var id = k.slice(0, i);
                        tree[id] = {
                            [k.slice(i)]: tree[k], [string.slice(i)]: 0
                        }
                        ;
                        delete tree[k];
                        return true;
                    }

                }
            );

        if (!result) {
            tree[string] = 0;
        }
    }

    $(document).ready(function () {
        localStorage.clear();
        $('#input_id').keyup(function (e) {
            fsname = $('#input_id').val();
            var data = fsname.trim();
            var msg = $('#result');
            msg.empty();
            var localdata = localStorage.getItem(data);
            if (data) {
                if (localdata == null) {
                    $.ajax({
                        url: "search.php",
                        method: "post",
                        data: {
                            input: data
                        },
                        dataType: "",
                        success: function (name) {
                            var getdata = JSON.parse(name);
                            var tree = {};
                            getdata.forEach(insertWord.bind(null, tree));
                            localStorage.setItem(data, JSON.stringify(tree));
                            console.log(JSON.parse(localStorage.getItem(data)));
                            console.log(getdata);
                            var s = getdata.length;
                            for (var j = 0; j < s; j++) {
                                if (getdata[j].surname) {
                                    var show = '<div id="result">' + getdata[j].firstname + " " + getdata[j].surname + '</div>';
                                    msg.append(show);

                                } else {
                                    var show1 = '<div id="result">' + getdata[j].firstname + '</div>';
                                    msg.append(show1);

                                }
                            }
                        }
                    });
                } else {
                    var getdata = JSON.parse(localdata);
                    var s = getdata.length;
                    for (var j = 0; j < s; j++) {
                        if (getdata[j].surname) {
                            var show = '<div id="result">' + getdata[j].firstname + " " + getdata[j].surname + '</div>';
                            msg.append(show);

                        } else {
                            var show1 = '<div id="result">' + getdata[j].firstname + '</div>';
                            msg.append(show1);

                        }
                    }
                }
            }
        })

    });
</script>

我想要我的名字。但它显示未定义。我怎么解决这个问题?在控制台中,我的输出还不错。和保存在本地存储中的数据。

【问题讨论】:

  • want my firstname here 在哪里? but it shows undefined 是什么?
  • if (getdata[j].surname) ...我想要我的预期结果。在 if else 条件下。你找到我了吗?
  • 所以getdata[j].surname 未定义? localdata当时是什么样子的? 你找到我了 - 是的,没必要粗鲁 - 我的意思是,到目前为止 90% 的代码都是来自 so 的代码
  • 我无法运行此代码,因为它有脚本错误和不平衡的 html 标签
  • 其实不是。我的预期结果是 undefined 。当按下一个键。结果出现在显示未定义的 span 标签中。

标签: javascript trie


【解决方案1】:

您的代码无效,附加了多个具有相同 id var show = '&lt;div id="result"&gt;' + getdata[j].firstname + " " + getdata[j].surname + '&lt;/div&gt;'; msg.append(show); 的元素

然而msg是id为result的元素;

  • 请注意,让 span 包含块元素(例如 div)也是无效的。
  • 为什么要多次包含 jQuery?
  • 隐含的全局变量,
  • &lt;/br&gt; 无效,
  • fsname 是全局的(未定义)
  • 缺少分号,
  • 您确定要keyup 吗?在$('#input_id').keyup(function(e) { 在没有油门的情况下在每个键上执行 ajax?如果我按下“a”键并按住它会怎样?我收到多个“aaaaa” 也许使用“更改”事件?
  • localStorage.clear();在文档就绪事件处理程序中表明您可能希望使用 sessionStorage。
  • localStorage.setItem(data, JSON.stringify(tree)); 令人费解通常看起来像 localStorage.setItem("mytree", JSON.stringify(tree)); 或类似然后使用 localStorage.getItem("mytree"); 访问它
  • fsname = $('#input_id').val();你已经在事件处理程序中,所以使用fsname = $(this).val();
  • $(document).ready(function () { 最好写成$(function () { 作为推荐的方法https://api.jquery.com/ready/
  • 重写你的var show = '&lt;div id="result"&gt;' + getdata[j].firstname + " " + getdata[j].surname + '&lt;/div&gt;'; 类似var show = '&lt;span class="result"&gt;' + getdata[j].firstname + " " + (!!getdata[j].surname &amp;&amp; !!getdata[j].surname)? getdata[j].surname :"" + '&lt;/span&gt;';

即取这组线

if (getdata[j].surname) {
     var show = '<div id="result">' + getdata[j].firstname + " " + getdata[j].surname + '</div>';
     msg.append(show);
 } else {
     var show1 = '<div id="result">' + getdata[j].firstname + '</div>';
     msg.append(show1);
 }

改写为这两行

 var showName = getdata[j].firstname + " " + (!!getdata[j] && !!getdata[j].surname)? getdata[j].surname :"";
 msg.append('<span class="result">'  + showName + '</span>');

当你在做的时候,让你的代码更干。

把它放在一个函数中并调用它,而不是有条件地把它放入两次。

如果您想在其中使用块 (div),请将跨度(结果)设为 DIV。

【讨论】:

  • 是的,我看到了你所说的。我怎样才能摆脱这个问题?你能帮我做吗?谢谢
  • 这段代码还有很多其他问题。为什么要多次包含 jQuery?隐含的全局变量,&lt;/br&gt; 无效,fsname 是全局(未定义)缺少分号,您确定要keyup 吗?在$('#input_id').keyup(function(e) { 在没有油门的情况下在每个键上执行 ajax?如果我按下“a”键并按住它会怎样?我收到多个“aaaaa”也许使用“更改”事件?
  • 另外,文档就绪事件处理程序中的 localStorage.clear(); 表示您可能希望使用 sessionStorage。
  • 感谢@Mark Schultheiss。但可以帮我修复这段代码吗?
  • 我添加了要修复的问题列表
猜你喜欢
  • 2012-10-08
  • 2020-11-29
  • 2021-07-07
  • 2020-03-25
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 2016-10-02
  • 2012-01-15
相关资源
最近更新 更多