你能试试这个简单的例子并告诉我出了什么问题: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/
它应该切换主题
答案 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-e
或ui-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');
});
在你的第一个小提琴中,这改变了主题。