如何在函数中查找动态添加的数组元素

时间:2015-05-22 04:52:10

标签: javascript jquery html arrays google-chrome-extension

所以基本上我是在一个数组中添加一个元素,然后为该元素创建一个文本块。问题是我继续得到未定义的结果是在我创建的函数中调用该元素以将块文本设置为动态添加的元素文本。当我点击该块时,它会通过&&l_bad函数,因此数组中的所有数据都会显示出来。

保存功能:

$(document).on(click)

addNote函数:

function saveNote() {
    var noteTitle = document.getElementById("note-title");
    var noteText = document.getElementById("note-text");

    var noteTitleContent = noteTitle.value;
    var noteTextContent = noteText.value;

    /* SAVING NOTE HEADER & TEXT IN DOUBLE ARRAY */
    chrome.storage.local.get('noteTitleList', function (x) {
        var titleSet = x.noteTitleList;
        titleSet.push(noteTitleContent);

        chrome.storage.local.set({noteTitleList: titleSet}, function() {
            console.log('titleSet Saved: ' + titleSet);
        });
    });

    chrome.storage.local.get('noteTextList', function (x) {
        var textSet = x.noteTextList;
        textSet.push(noteTextContent);

        chrome.storage.local.set({noteTextList: textSet}, function() {
            console.log('textSet Saved: ' + textSet);
        });
    });

    addNote();
}

1 个答案:

答案 0 :(得分:2)

我让你的代码可以处理四个变化:

(1)最大的变化是重写saveNote()函数,因此在调用addNote()函数的回调之前它不会调用chrome.storage.local.set。需要进行此更改,因为chrome.local.storage函数是异步的。

function saveNote() {
    var noteTitleContent = document.getElementById("note-title").value;
    var noteTextContent = document.getElementById("note-text").value;

    /* SAVING NOTE HEADER & TEXT IN DOUBLE ARRAY */
    chrome.storage.local.get(['noteTitleList', 'noteTextList'], function (x) {
        var titleSet = x.noteTitleList || [];
        var textSet = x.noteTextList || [];

        titleSet.push(noteTitleContent);
        textSet.push(noteTextContent);

        chrome.storage.local.set({noteTitleList: titleSet, noteTextList: textSet}, function() {
            addNote();
        });
    });
}

注意在一次调用chrome.storage.local.set时如何将值存储到两个数组中。

(2)关闭addNote()函数时出现语法错误。将});更改为}

(3)在addNote()函数中,从数组长度中减去一个以获得最后一项。改为:

var noteTitle = titleSet[titleSetLength-1];

(4)在注释链接的点击处理程序中(您从问题中删除),在将类名放在一起时,将1添加到c。这是必需的,因为循环索引c是从零开始的,而类名上的数字是从一开始的。

if($this.hasClass('note-'+(c+1))) {

该行发生在两个地方。

您还应将所有代码放在文档就绪处理程序中。 (至少注册事件处理程序的代码应该放在那里。)

我会推荐其他改进,但这个答案已经很长了。最大的问题是摆脱笔记链接的点击处理程序中的for循环。