jQuery Mobile列表视图或按钮刷新不会更新主题

时间:2012-07-21 13:56:26

标签: jquery listview jquery-mobile

你能试试这个简单的例子并告诉我出了什么问题:http://jsfiddle.net/ca11111/unQWP/1/li主题已更改,但列表视图刷新无法更新。

如果我想更新右键主题,则会出现同样的问题:http://jsfiddle.net/ca11111/unQWP/2/。我收到错误:

Uncaught TypeError: Cannot call method 'removeClass' of undefined

=============================================== ==

我能知道为什么这个ALMOST有效但不...,(需要2次点击,才能改变,并且无法取回)

http://jsfiddle.net/ca11111/unQWP/5/

它应该切换主题

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码完成您想要的任务:http://jsfiddle.net/kE8GJ/。请注意,代码中最重要的部分是条件:

var element;

if ($(this).hasClass("ui-li-link-alt")) {
    element = $(this);
}
else {
    element = $(this).closest('li.ui-li');
}

element
    .removeClass("ui-btn-up-c ui-btn-hover-c")
    .addClass("ui-btn-hover-e")
    .attr("data-theme", "e");

这将在左侧按钮的li元素或右侧按钮的a元素上正确设置主题,这最终会将新主题应用于点击的元素,这似乎是你的目标。

至于您看到的TypeError,我认为它与您的.button()电话有关。 jQuery Mobile列表视图中的元素通常不作为按钮处理,因此这样的调用可能会导致问题。 .trigger('create')等所有来电都应在listview级别进行。


为了响应您的编辑,您必须手动添加和删除类才能成功切换主题。否则,旧主题的类仍将存在。例如,如果您从主题e切换到c,则ui-btn-up-eui-btn-hover-e仍将位于li元素上,因此它似乎不会切换回主题c。您可以在此处查看此操作:http://jsfiddle.net/wu86C/

最重要的代码是此处的第二行(以及从c切换到e的等效代码):

var li = $(this).closest('li');
li.removeClass("ui-btn-up-e ui-btn-hover-e").addClass("ui-btn-hover-c");

答案 1 :(得分:0)

我不确定,但是使用jquery mobile你没有你的html结构,但你的“li里面的标签”被包含在一些div中。

如果你这么简单,请尝试:

$('#mylist a').click(function() {
        console.log($(this));        
        $('#li1').attr("data-theme", "e");
        alert( $('#li1').attr("data-theme"));
        $('#mylist').listview('refresh');
    });

在你的第一个小提琴中,这改变了主题。