基于 cmets 的更新
我相信正在发生的事情是变量/属性 (data) 已更新,但 DOM 未更新。使用 jQuery .on() 方法将 blur 和 focus 事件绑定到元素的 textinput,应该会导致 DOM 在处理程序触发后立即刷新/重新读取。因此,它应该反映发生在事件处理程序内的更改,即对data 属性的更新。
选项 1:
$("#elementId").textinput.on("blur", function(){
$("#elementId").data("clear-btn", false);
}).on("focus", function(){
$("#elementId").data("clear-btn", true);
});
或者以下可能也会起作用:
选项 2:
$("#elementId").textinput.on("blur", function(){
$("#elementId").attr("data-clear-btn", false);
}).on("focus", function(){
$("#elementId").attr("data-clear-btn", true);
});
但如果您想最严格地遵守 jQuery 和 HTML5/canvas,您可能应该使用 option #1
更新##标题##
我尝试了各种变体 - 正在重置 inputbox 的 CSS,以便始终再次应用 ui-input-clear-hidden。 jQuery Mobile javascript 使用它来确定它是否可见...而不是 data-clear-btn 值。
我已经设法使用 .css("display","none) 和 .css("visibility","hidden) 来解决这个问题,这是应用实际 ui-input-clear-hidden 类的地方,后者是最好是因为它不会删除元素,只会使其不可见。但是,在这两种情况下,它都会影响点击功能。多玩一些可能是可能的……但是,已经过了 2 个小时……我不能再花时间在上面了。祝你好运。
$("#elementId").on("blur", function(){
$("#elementId").data("clear-btn", false);
console.log(
$("#elementId")
.data("clear-btn")
);
$("#console").append(
$("#elementId")
.data("clear-btn").toString() + "</br>"
);
$("#elementId")
.parent()
.children("a")
.addClass(
"ui-input-clear-hidden"
);
$("#console").append(
$("#elementId")
.parent()
.children("a")
.attr("class") + "</br>"
);
$("#elementId")
.parent()
.children("a")
.css("visibility","hidden")
;
}).on("focus", function(){
$("#elementId").data("clear-btn", true);
$("#elementId")
.parent()
.children("a")
.removeClass(
"ui-input-clear-hidden"
);
console.log(
$("#elementId")
.data("clear-btn")
);
$("#console").append(
$("#elementId")
.parent()
.children("a")
.attr("class") + "</br>"
);
$("#console").append(
$("#elementId")
.data("clear-btn").toString() + "</br>"
);
$("#elementId")
.parent()
.children("a")
.css("visibility","visible")
;
});