使用变量[i]

时间:2019-07-09 21:52:44

标签: javascript google-chrome-extension

我目前正在进行chrome扩展程序,其中一项功能包括拥有待办事项列表。
我有一些代码可以检查任务,并在任务执行时显示通知。
当用户单击通知按钮时,它将触发基于该按钮的功能。
这是我的代码:

function getDateTime() {

  var now = new Date();
  var year = now.getFullYear();
  var month = now.getMonth() + 1;
  var day = now.getDate();
  var hour = now.getHours();
  var minute = now.getMinutes();
  var second = now.getSeconds();

  if (month.toString().length == 1) {
    month = '0' + month;
  }
  if (day.toString().length == 1) {
    day = '0' + day;
  }
  if (hour.toString().length == 1) {
    hour = '0' + hour;
  }
  if (minute.toString().length == 1) {
    minute = '0' + minute;
  }
  if (second.toString().length == 1) {
    second = '0' + second;
  }
  var dateTime = year + '/' + month + '/' + day + ' ' + hour + ':' + minute + ':' + second;

  chrome.storage.sync.get(['importantTasks'], function(result) {
    var elements = JSON.parse(result.importantTasks);

    var currentDate = month + ' ' + day + ', ' + year;
    var currentTime = hour + ':' + minute;
    for (var i = 0; i < elements.length; i++) {

      var taskTitle = elements[i].name;
      var taskDate = elements[i].date;
      var taskTime = elements[i].time;

      if (currentDate === taskDate && currentTime === taskTime && second === '00') {

        var myNotificationID = null;

        chrome
          .notifications
          .create('', {
            type: 'basic',
            iconUrl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Android_robot_2014.svg/872px-Android_robot_2014.svg.png',
            title: taskTitle,
            buttons: [{
                title: 'Dismiss',
                iconUrl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Android_robot_2014.svg/872px-Android_robot_2014.svg.png'
              },
              {
                title: 'Mark as done',
                iconUrl: 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Android_robot_2014.svg/872px-Android_robot_2014.svg.png'
              }
            ],
            message: 'You have a task set for today (' + currentDate + ') at ' + currentTime + ' named "' + taskTitle + '"'
          }, function(id) {
            myNotificationID = id;

          });
        chrome.notifications.onButtonClicked.addListener(function(notifId, btnIdx) {
          if (notifId === myNotificationID) {
            if (btnIdx === 0) {} else if (btnIdx === 1) {

              var i2 = i;

              chrome.storage.sync.get(['importantTasks'], function(result, i, i2) {
                var task = JSON.parse(result.importantTasks);
                task[i2].checkedState = 'checked';
                var JsonTask = JSON.stringify(task);
                chrome.storage.sync.set({
                  'importantTasks': JsonTask
                });
              });



            }
          }
        });

        /* Add this to also handle the user's clicking 
         * the small 'x' on the top right corner */
        chrome.notifications.onClosed.addListener(function() {});
      }
    }
  });
}

// example usage: realtime clock
setInterval(function() {
  getDateTime();
}, 1000);

所以问题在于,当用户单击“标记为完成”时,点击侦听器应执行一些代码,将该代码标记为已选中:

   var task = JSON.parse(result.importantTasks);
        task[i2].checkedState = 'checked';
      var JsonTask = JSON.stringify(task);
    chrome.storage.sync.set({'importantTasks': JsonTask});   

但是,当代码到达task[i2].checkedState = 'checked';时,会出现以下错误:

  

TypeError:无法读取未定义的属性“ checkedState”;

我看到其他人遇到相同问题的其他问题,人们说问题是未定义变量(在我的情况下为“任务”),要解决该问题,您必须添加task[i2] = []
我添加了此代码,错误停止显示,但是什么也没有发生。 有没有办法使这项工作按预期进行?
感谢您的任何帮助。

编辑: 因此,我删除了click函数内部的代码,并将其添加到其外部。 然后它可以正常工作,所以当我在click函数中添加它时出现了问题。

0 个答案:

没有答案