此代码最初按预期工作,但在昨天检查后,它在Safari中不再有效(它仍可在Chrome和Firefox中正常运行)。
以下是我要做的事情:我在可见函数之外声明变量“salonSelection”然后我有一个在salonSelection中放置值的click函数。沙龙选择然后被放入localStorage。然后,单击功能将窗口发送到新位置。这可以按预期工作,但Safari不会在点击功能之外传递变量。
这是代码,为了便于阅读,我尽可能地评论。在最底部是什么给了我一个空值。感谢您提前提供的任何帮助:
var salonSelection
// fetch a list of salons in DB
allRef.child("salons").on('child_added', function(snapshot) {
// for each group, fetch the name and print it
var salonId = snapshot.key();
allRef.child("salons/" + salonId + "/salonName").once('value', function(snapshot) {
// Creates a new row for each item in table
var newRow = $('<tr>').text('').appendTo('#searchTable');
// Adds a cell for each salonName in row
var nameCell = $('<td>').text(snapshot.val()).appendTo(newRow);
// Adds an id of the salon name + 'Id' to each row
var cellId = nameCell.attr("id", snapshot.val().replace(/\s+/g, '') + "Id")
// Changes class of each cell
nameCell.addClass("text-left font-w600 text-primary");
// Passes clicked salon name to a variable for use on another page
$('#searchTable tr td').click(function(){
// Acquires text value of the specific td of tr
salonSelection = $(this)[0].childNodes[0].nodeValue
// Saves the variable to local storage
delete localStorage.salonSelection;
window.localStorage.salonSelection = salonSelection;
// Sends user to new location
window.location = 'base_pages_schedule_1.html';
});
});
});
// Attempting to retrieve the localStorage object, this is null in Safari only
$('#salon-name').click(function() {
console.log(localStorage.salonSelection)
})
在使用.data()
的建议之后,我添加了一些额外的代码进行测试。现在undefined
的结果将被记录到所有浏览器的控制台。
// Passes clicked salon name to a variable for use on another page
$('#searchTable tr td').click(function(){
// Acquires text value of the specific td of tr
salonSelection = $(this).text()
$(this).data("salonSelection", { name1: salonSelection});
test = $(this).data("salonSelection").name1;
// The value IS being stored and retrieved accurately here
console.log(test)
// Saves the variable to local storage
delete localStorage.salonSelection;
window.localStorage.salonSelection = salonSelection;
window.location = 'base_pages_schedule_1.html';
});
});
});
// Attempting to retrieve the .data() object, this is undefined
$('#salon-name').click(function() {
console.log(test)
});
仔细检查后,重新启动Safari浏览器只允许整个功能正常运行(这是我提供的初始代码)。每次在此之后,$('#salon-name').click()
函数仅记录第一次运行时存储的元素。
答案 0 :(得分:0)
http://caniuse.com/#search=localstorage建议Safari可以使用localStorage,因此我不会认为它就是这样。
调试到点击处理程序,并从td获取后查看salonSelection
的值是什么。我的猜测是空白,产生你看到的价值。
为什么呢?我猜测那里的其他标记或节点会使$(this)[0].childNodes[0].nodeValue
的行为不像你期望的那样。您可以尝试将其简化为$(this).text()
,看看它是否能为您提供您正在寻找的数据。如果这不起作用,请尝试将值存储在$(..).data()
而不是可见文本中。