【问题标题】:How to insert variable into jqm pageshow function如何将变量插入jqm pageshow函数
【发布时间】:2013-08-26 05:26:45
【问题描述】:

我不确定这是否可行,但我想知道如何将页面 id 传递给 pageshow 函数,如下所示。我怀疑这是错误的方法,但答案暗示了我。通过此示例传递 page 并在 pageshow 中附加页面 ID - 获取对应的 #qanda_entry_1#qanda_entry_2 等到一个文档中的一系列页面。

更新:来自 DGS 的代码如下

页面转换正在发生,但页面没有更新或呈现。我的数据来自全局变量“articles_data”。我看不到点击函数中'article'的值如何传递到新页面?警报“警报(文章);”没有在 pageshow 上被触发。

另外 - 这是一个多页文档。

$(document).on("click",".articleLink",function () {
$(this).addClass('clicked_button');  
var page = $(this).attr('data-page');
var article = $(this).attr('data-id');
//alert(article);
$.mobile.changePage(page, {
transition: 'slide',
});
});

$('div[data-role="page"]').on('pageshow',function(){

var page_id = $(this).prop('id');
var article = $('.articleLink.clicked_button').attr('data-id').substr(4);
alert(article);
$('.articleLink.clicked_button').removeClass('clicked_button');

$('#qandahead h1').empty();
$('#qanda_text div').empty();
jQuery.map(articles_data, function(obj) {
   if(obj.id === article){
      $('#qandahead').html('<h1>'+ obj.title + '</h1>');
      $('#qanda_text').html('<h2>'+ obj.title + '</h2>' +
         '<p>' + obj.introtext + '</p>');
   } 

});

});

我的listview链接结构是动态生成的

<li><a class="articleLink ui-link-inherit"  data-page="#qanda_entry_0" data-id="art_18"></li>
<li><a class="articleLink ui-link-inherit"  data-page="#qanda_entry_1" data-id="art_9"></li>

【问题讨论】:

  • 在任何函数之外定义变量,它们将是全局的,可以被任何函数使用。即var page = '';

标签: jquery jquery-mobile pageshow


【解决方案1】:

使用类似于下面的代码。这将为您提供触发 pageshow 事件的元素的 ID

$('div[data-role="page"]').on('pageshow',function(){
    var page_id = $(this).prop('id');
});

将您的代码更改为

$(document).on("click",".articleLink",function () {
    $(this).addClass('clicked_button');  
    var page = $(this).attr('data-page');
    $.mobile.changePage(page);
});

$('div[data-role="page"]').on('pageshow',function(){
    var page_id = $(this).prop('id');
    var article = $('.articleLink.clicked_button').attr('data-id').substr(4);
    $('.articleLink.clicked_button').removeClass('clicked_button');
    $('#qanda_text div').empty();
    $('#qandahead h1').empty();
    jQuery.map(articles_data, function(obj) {
       if(obj.id === article){
          $('#qandahead').html('<h1>'+ obj.title + '</h1>');
          $('#qanda_text').html('<h2>'+ obj.title + '</h2>' +
             '<p>' + obj.introtext + '</p>');
       } 

    });

});

这将概括您的 pageshow 处理程序,而无需动态设置它。我有点担心您的 html,因为您已经通过 id 引用了两个元素,并且 id 一次只能出现在一个页面上。

【讨论】:

  • 感谢您的建议。我不断收到错误detailed error: TypeError: $(...).prop(...) is undefined 也不知道应该在我的函数中放置或替换哪里?
  • 代码已更新。我只是想向您澄清一个事实,即 pageshow 事件在页面显示后触发,而不是您更改页面的方法。这意味着每次单击“.articleLink”时,您都会将另一个函数绑定到 pageshow 事件,从而导致许多重复绑定
  • 感谢您的更新 - 非常感谢。不幸的是,我将不得不休息一下。当我可以更新我的代码时,我会在这里发布。
  • 更新了我的原始帖子并包含了 DGSs 代码。仍然没有按预期工作
  • 请解释什么不工作是变量文章不是你所期望的? pageshow 处理程序没有被执行吗?内容是否未正确填充?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
相关资源
最近更新 更多