2013-05-31 3 views
0

Я использую jQuerymobile, и у меня есть список. В представлении списка у меня есть динамический контент, загружаемый из localStorage. Когда вы щелкаете по определенному элементу списка, я хочу, чтобы пользователь перешел на следующую страницу, связанную с этим конкретным объектом localstorage.Можно ли загружать и комбинировать динамические строки в localStorage.getItem()?

Я могу как-то заставить мой код работать ниже (что я прокомментировал). Проблема заключается в том, что

var favoritedName = JSON.parse(localStorage.getItem(placesText)); 

возвращает NULL.

Но если я вручную загрузить в

var favoritedName = JSON.parse(localStorage.getItem("placesFireside Bar")); 

он работает отлично.

Мне интересно, можете ли вы динамически загружать в .text() из списка, который вы нажимаете в списке, а затем задаете это как ключ в localstorage.getItem().

Вот мой код:

// click the list item, which is a specific bar 
$('#all-my-favorites li').click(function() { 

// get specific name of Bar from the list item 
listitemText = $(this).text(); 

// OR manually name the list item. example here is "Fireside Bar" for testing purposes 
//listitemText = "Fireside Bar"; 

// combine the strings, so i can search localstorage for the relevant key item 
placesText = "places" + listitemText; 
//alert(placesText); 
// returns "placesFireside Bar" or "places(barname from listitem)" 

}); 

// go to the new page, which should show content from the relevant key item 
$('#favorited').on('pagebeforeshow', function() { 

// test to see if placesText is a string 
alert(jQuery.type(placesText) === "string"); 
// returns TRUE 

// find the relevant keyitem from localstorage, and name the object favoritedName 
var favoritedName = JSON.parse(localStorage.getItem(placesText)); 
alert(favoritedName); 
// returns NULL 

$(this).find('[data-role=header] .ui-title').text(favoritedName.name); 
$('#FavoritedplaceName').text(favoritedName.name); 
$('#FavoritedlocationName').text(favoritedName.location); 
$('#FavoritedtimeofDay').text(favoritedName.timeOfDay); 
$('#FavoriteddayofWeek').text(favoritedName.dayofWeek); 
}); 
+0

Если вы установили console.log (placesText) после того, как вы его установили, что вы получаете? – K3N

+0

@ Ken-AbdiasSoftware Я получаю правильный вывод, который является «placesFireside Bar», который представляет собой текст элемента списка() «Fireside Bar» + «places» – Aaron

ответ

0

Я интересно, если вы можете динамически загружать в .text() из ListItem вы щелкаете в виде списка, а затем установить, что в качестве ключа в localstorage.getItem().

Да, вы можете установить переменную и использовать его непосредственно для localStorage.getItem(), localStorage.setItem() и localStorage.removeItem().

var myKey = 'myKey'; 
var myData = 'Data string'; 

localStorage.setItem(myKey, myData); 

alert(localStorage.getItem(myKey)); 

Просто обратите внимание, что ключ чувствителен к регистру, а пустое пространство также будет влиять на него.

Убедитесь, что деталь вы передаете не содержат строки-каналы, невидимые символы и т.д. Самый простой способ проверить это console.log(placesText), а затем проверить в консоли, если это совпадение, что вы ожидали:

placesText = "places" + listitemText; 
console.log(placesText); 
console.log(escape(placesText)); 
+0

weird, console.log (placesText); возвращает правильную строку, которая является «placesFireside Bar», которая является правильным значением ключа в localstorage, но она не может ее анализировать здесь ... var favoritedName = JSON.parse (localStorage.getItem (placesText)); – Aaron

+0

@Aaron попытайтесь инкапсулировать строку в escape(), чтобы узнать, что такое контент (вы можете также разместить здесь): 'console.log (escape (placesText))'. Таким образом, вы можете увидеть, есть ли в строке некоторые непечатаемые символы, которые вы не видите в консоли. – K3N

+0

Интересно ... Я получаю «placesFireside% 20Bar% A0», когда я делаю console.log (escape (placesText)); Я получаю «placesFireside Bar» только для console.log (placesText); – Aaron

Смежные вопросы