【问题标题】:jQuery and Local Storage unusual behaviorjQuery 和本地存储异常行为
【发布时间】:2012-05-14 20:37:50
【问题描述】:

我正在尝试从本地存储中检索一些项目,如果它们在那里,则在页面上显示一些内容。这是我想要做的:

function loadData()
{       
    var transData = storage.get('TransInfo');

    if(transData != undefined)
    {
        $('#UserName').val(transData[0]);

        if(transData[1] == 'Blue')
        {
            $('#radio-choice-1').attr('checked', true);
        }
        else
        {
            $('#radio-choice-2').attr('checked', true);
        }

        $('#TransNum').val(transData[2]);

        if(transData[3] == 'A')
        {
            $('#radio-choice-1-board').attr('checked', true);
        }
        else
        {
            $('#radio-choice-2-board').attr('checked', true);
        }

        unHideAll();
        return true;
    }
};

当最终加载数据时,我想调用 unHideAll():

//THIS FUNCTION FAILS WHEN CALLED!!
function unHideAll()
{
    /*
    $('#radio-choice-1').checkboxradio('enable');
    $('#radio-choice-2').checkboxradio('enable');
    $('#radio-choice-1-board').checkboxradio('enable');
    $('#radio-choice-2-board').checkboxradio('enable');
    $('#TransNum').textinput('enable'); 
    $('#UserContinue').remove();
    $('#nextButton').show();
    */
};

我遇到的问题是 unHideAll() 永远不会到达任何地方。如果我在顶部放置一个 alert(),它会显示,但如果我在底部放置一个 alert(),它永远不会到达那里。知道为什么吗?

这是我调用方法的方式:

$(document).ready(function()
{   
    clearStorage(); 
    loadData();
    unHide();           
    collectData();
});

知道为什么我不能让 unHideAll() 做任何事情吗?它适用于传统的 unHide() 方法,我在还没有本地存储时使用该方法,但如果存在本地存储,它往往会很快失败。

有什么想法吗?

编辑:

这是我的本地存储代码:

window.storage = {
    store:localStorage,
    get: function( key ) 
    {
        try
        {
            return JSON.parse(this.store[key]);
        } 
        catch(e) {};

        return undefined;
    },
    set: function( key, value) 
    {
        try
        {
            this.store[key] = JSON.stringify(value);
        } 
        catch(e) {};
    }
};

编辑2:

这里有一些有效的代码,这就是为什么它在我的新方法中不起作用的原因。

//THIS CODE WORKS FLAWLESSLY TO REVEAL ITEMS!!
$('#UserContinue').click(function() 
{
    if($('#UserName').val() == '') 
    {
        alert('Please Enter a User Name First!');
        return false;
    }
    else 
    {
        User_Name = $('#UserName').val();
        $('#radio-choice-1').checkboxradio('enable');
        $('#radio-choice-2').checkboxradio('enable');
        $('#radio-choice-1-board').checkboxradio('enable');
        $('#radio-choice-2-board').checkboxradio('enable');
        $('#TransNum').textinput('enable'); 
        $('#UserContinue').remove();
        $('#nextButton').show();

        confirm('Welcome ' + User_Name +'!');

        return true;
    }

    return true;
});

这真的很奇怪......

【问题讨论】:

  • storage.get('TransInfo')是什么,我觉得应该是localStorage.getItem('TransInfo')
  • 我附议@thecodeparadox,这是通常的语法,也将返回的 transData 记录到您的控制台,有些东西告诉我它不是您要返回的数组,如果您要返回任何东西各位,您的控制台中是否有错误消息?
  • 我有自己的存储方式,我把它放在这里作为编辑
  • 另外,当我使用 alert() 记录 transData 时,所有数据都存在并正确添加到页面中,但我无法取消隐藏字段。
  • 好吧,checkboxradio()textinput() 函数到底在做什么,它们是否定义在正确的范围内,是否可以链接,并且最重要的是可以工作?

标签: javascript jquery html jquery-mobile local-storage


【解决方案1】:

unHideAll() 的代码完全错误。你没有像 checkboxradio() 或 textinput() 这样的方法。这就是为什么在调用函数时会发生错误并产生您解释的行为。
要使用 jQuery 启用/禁用表单元素,请阅读常见问题解答: http://docs.jquery.com/Frequently_Asked_Questions#How_do_I_disable.2Fenable_a_form_element.3F

【讨论】:

  • 好眼光,只是自己注意到了这些,但没有看到这个答案,但可能是 OP 实际上有这些方法!
  • 这很奇怪,因为我在前面的代码中使用了完全相同的方法,它们完美地工作。
  • 您使用的是哪些库?只有 jQuery 吗?
  • 我也在使用 jQuery mobile,这是我获得这些方法的地方
  • 现在我们已经拥有了我们所需要的一切:) 当调用 unHideAll() 时,您是否查看了控制台以查看是否有错误?
【解决方案2】:

你可以试试这个:

window.storage = {
    store:localStorage,
    get: function( key ) 
    {  
      var ret = this.store.getItem('key');
      if(ret) {
           return JSON.parse(ret);
       }
        return undefined;
    },
    set: function( key, value) 
    { 
        this.store.setItem(key, JSON.stringify(value));
    }
};

注意:

  1. 在您的get 函数中,我看不到任何读取localStorage 的内容
  2. set 函数不要将数据设置为localStorage

【讨论】:

  • 实际上它确实获取并设置了存储,再读一遍!你好像打错了,if(reg)reg是什么?
猜你喜欢
  • 1970-01-01
  • 2016-02-09
  • 2020-03-16
  • 1970-01-01
  • 2020-11-03
  • 2014-08-16
  • 2017-06-24
  • 1970-01-01
  • 2019-01-05
相关资源
最近更新 更多