0

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

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

未捕获的类型错误:无法调用未定义的方法“removeClass”

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

我能知道为什么这几乎可以工作但没有..,(需要点击 2 次才能更改,并且无法返回)

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

它应该切换主题

4

2 回答 2

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级别进行。


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

最重要的代码是这里的第二行(以及从cto切换的等效代码e):

var li = $(this).closest('li');
li.removeClass("ui-btn-up-e ui-btn-hover-e").addClass("ui-btn-hover-c");
于 2012-07-21T14:43:02.610 回答
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');
    });

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

于 2012-07-21T14:39:27.970 回答