键值对中的随机变量不被解释为变量

时间:2016-10-09 05:52:07

标签: javascript jquery

我尝试使用key:value对存储在本地存储中的某些值。我希望key是来自Math.random()的随机值,但我的值不会被视为变量

这是小提琴

https://jsfiddle.net/ps4xs60x/27/

和代码

$(document).ready(function () {
 $(document).on('click', '.btn-primary', function(){
 var num = Math.random();
         $('.table tbody').append('<tr class="child"><td>one</td><td><button id="'+num+'" onClick="ae(this.id); function ae(clicked_id) {var items = []; var entry = {\'num\': clicked_id}; items.push(entry);localStorage.setItem(\'entry\',JSON.stringify(items));alert(localStorage.getItem(\'entry\',JSON.stringify(items)));}" type="button" class="invite ">Invite</button></td></tr>');
      });
});

如何将num视为变量?

1 个答案:

答案 0 :(得分:2)

声明:

因此localStorage在这些片段中的工作量不大,但请参阅下面的代码或this forked fiddle

代码更改

  1. 将函数ae()移出onClick属性,并将其定义为常规JS函数。
  2. 假设你要添加每个被点击到localStorage元素entry数组的数字,那么你需要每次都将它解析为json(如果已设置)而不是新建阵列。
  3. 不是使用onclick属性,而是为类名为invite的元素添加单击处理程序,就像您对类名为btn-primary的元素所做的那样... < / LI>

    function ae(event) {
      var items = JSON.parse(localStorage.getItem('entry'));
      if (items == null || typeof items !== 'object') {
          items = [];
      }
      var entry = {
        'num': event.target.id
      };
      items.push(entry);
      localStorage.setItem('entry', JSON.stringify(items));
      alert(localStorage.getItem('entry'));
    }
    $(document).ready(function() {
      $(document).on('click', '.invite', ae);
      $(document).on('click', '.btn-primary', function() {
        var num = Math.random();
        $('.table tbody').append('<tr class="child"><td>one</td><td><button id="' + num + '"type="button" class="invite ">Invite</button></td></tr>');
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table class="table">
      <tbody></tbody>
    </table>
    
    <button class="btn-primary">Add Row
    </button>