3

在新的页面加载时,代码工作得很好并且会显示正确的信息,但是如果你向后导航并重试,它会显示第一次点击的信息。首先,这是代码,我将解释我所拥有的......

$(document).on('pageinit', '#months', function(){
    $('#listOfHolidays').on('click', 'li', function () {
        listIndex = $(this).index();
        $.mobile.changePage('#detail');
    });
});
$(document).on('pageinit', '#detail', function(){
    console.log(listIndex);
    $('#ho').text(holidayNames[listIndex]);
    $('#hi').text('The index of the list item clicked is: ' + listIndex);

});

我有 2 个data-role="page"名为的页面(带有#months的 div),其中包含我要从中选择的项目列表,而 #detail 是我要根据用户从列表中的选择来填充的页面。我的列表视图的 id 是#listOfHolidaysarray其中保存列表中每个项目的值的称为 holidayNames。然后,我在名为 #hi 和 #ho 的 div 的详细信息页面中显示此基本信息(其中一些将被更改,我只是想测试解决此问题的方法)。我还在详细信息的标题中启用了后退按钮。

就像我说的,当我重新加载这个时,正确的假日名称和索引号会显示在我的详细信息页面中,但是当我使用后退按钮返回并重试时,它会使用与第一个相同的信息填充详细信息页面click.

我认为这是因为 jquery 正在用我选择的第一个索引和假日名称初始化第二个$(document).on()函数中的详细信息页面'pageinit',因此它不需要再次初始化并从第一个请求中提取数据我单击另一个列表项。

那是我对正在发生的事情的模糊理解,所以请纠正我的错误并引导我朝着正确的方向前进!

谢谢!

4

1 回答 1

2

'pageinit' 事件仅在页面被引入 DOM 时触发。因此,您必须将假期文本替换为新的代码,只会在原始点击时触发。接下来的几次点击不会导致该功能触发。

如果您绑定到“pagebeforeshow”,那么它会在您每次更改页面时触发,您可以在那里绑定相同的功能,它应该可以正常工作。

$(document).on('pagebeforeshow', '#detail', function () {
  console.log(listIndex);
  $('#ho').text(holidayNames[listIndex]);
  $('#hi').text('The index of the list item clicked is: ' + listIndex);
});

我删除了一些东西以简化示例。

JSFiddle 示例

于 2013-05-16T18:51:31.220 回答