一个事件无法正常工作的多项功能

时间:2015-06-20 12:26:12

标签: javascript jquery local-storage

所以我的问题背后的逻辑:

我有一个这样的清单:

    <ul>
      <li>
       <a href="#edit" data-transition="fade" class="editLink" data-kms="1" data-date="2015-06-02">Edit</a>
      </li>
      <li>
       <a href="#edit" data-transition="fade" class="editLink" data-kms="2" data-date="2015-06-02">Edit</a>
      </li>
      <li>
       <a href="#edit" data-transition="fade" class="editLink" data-kms="3" data-date="2015-06-02">Edit</a>
      </li>
    </ul>

因此,当我按下编辑链接时,我必须使用此功能收集data-kmsdata-date,并将它们放入localStorage

function setCurrent() {
        //Set localStorage items for clicked element
        localStorage.setItem('currentKms', $(this).data('kms'));
        localStorage.setItem('currentDate', $(this).data('date'));

        //Get data
        var kms = localStorage.getItem('currentKms');
        var date = localStorage.getItem('currentDate');

        //Insert data into edit form
        $('#editKms').val(kms);
        $('#editDate').val(date);
    }

然后我想使用此函数从本地存储中删除该条目:

function deleteRun() {
        //Get Current Data
        var currentKms = localStorage.getItem('currentKms');
        var currentDate = localStorage.getItem('currentDate');

        var runs = getRunsObject();
        var i = 0;

        //Loop throuh runs and remove current run from 'runs' object
        while (i < runs.length) {
            //Remove Current Run
            if (runs[i].kms == currentKms && runs[i].date == currentDate) {
                runs.splice(i, 1);
                alert('Run Deleted');
            } else {
                alert('Run cant be deleted!');
            }
            //Save array without current run
            localStorage.setItem('runs', JSON.stringify(runs));
            i++;
        }

        //Show Runs Again
        $('.original').hide();
        showRuns();
        //Preventing form from submiting
        return false;

    }

所以基本上我必须同时在1个事件上运行2个函数。 而我正试图这样做:

$('.deleteLink').on('tap', function(){
    setCurrent();
    deleteRun();
});

但由于某种原因setCurrent未按预期保存数据,因此将值设置为undefined

但如果我这样运行:

  $('.deleteLink').on('tap', setCurrent);

它工作正常,它实际上正确设置currentKms&amp;的currentdate。

那么如何在同一事件上正确运行这两个函数呢?因为

 function(){
    setCurrent();
    deleteRun();
 });

出于某种原因,我的情况不起作用。

1 个答案:

答案 0 :(得分:3)

根据您的方法import getpass, poplib user = '**********@gmail.com' Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995') Mailbox.user(user) Mailbox.pass_('*********') numMessages = 1 #len(Mailbox.list()[1]) #Only one mail file = open("mail.html", "w") for i in range(numMessages): for msg in Mailbox.retr(i+1)[1]: file.write(msg) file.close Mailbox.quit() ,函数this中没有引用调用该事件的元素。

您可以使用.call()

  

setCurrent方法调用具有给定call()值的函数和单独提供的参数。

this

您可以使用bind()

  

$('.deleteLink').on('tap', function(){ setCurrent.call(this); deleteRun(); }); 方法创建一个新函数,在调用时,将其this关键字设置为提供的值,并在调用新函数时提供任何前面提供的给定参数序列。

代码

bind()