【问题标题】:Setting Text of Jquery Mobile Input Field设置 Jquery 移动输入字段的文本
【发布时间】:2011-08-23 00:14:23
【问题描述】:

我在设置 jQuery Mobile 文本输入的显示文本时遇到问题。以下是我的代码

$('#editPartyName').textinput();
$('#editPartyName').val(party.name);

行为真的很奇怪,第一次显示模态框时,文本输入框在模态框上(jquery mobile simple dialog plugin),文本在模态框上的输入字段中就好了。但是,第二次显示模式时,输入中的可视文本将消失。但是,当我检查元素的值时, alert($('#editPartyName).val());该值在那里并且是正确的。文本不会显示在元素中。我正在使用 JQM Beta 1。我还尝试在 val() 声明之后粘贴 $('#editPartyName').textinput() 。

有人有什么建议吗?谢谢!

【问题讨论】:

  • 我在通过.val("") 以编程方式设置值时遇到“后样式”问题,并发现调用.focus().blur() 解决了它。

标签: jquery jquery-mobile


【解决方案1】:

我也遇到过这个。我可以使用$('#some_id').val('foobar') 设置文本输入的值,然后使用console.info($('#some_id').val()); 将值打印到控制台,但在浏览器中,文本输入为空。

戳了一会儿之后,我发现$('input[id=some_id]').val('foobar') 按预期工作。因此,显然,jQuery 通过 ID 引用元素存在某种奇怪的错误。

【讨论】:

  • 如果您通过 ID 引用,请确保它对于您的整个站点是唯一的,因为 jQuery Mobile 伪页面存储在同一个 DOM 中。因此,如果您尝试在一个页面上选择#header,它可能会在另一个页面上选择#header(带有ID,找到的第一个被返回,其余的被忽略)。
  • 就我而言,没有重复的 ID。
  • 这是 Jquery 的一个疯狂的怪癖。非常感谢
【解决方案2】:

要创建使用.textinput() 的jQuery Mobile 文本输入样式,并使用.textinput("refresh") 刷新现有的jQuery Mobile 文本输入的视图。因此,在后续调用中,您需要使用.textinput("refresh") 方法,在未初始化的文本输入中,您需要使用.textinput()

类似:

$('#editPartyName').val(party.name).textinput('refresh');

我的经验是选择输入,但我相信文本输入也是如此,这是我为选择更新视图所做的:

$("select#foo").selectmenu("refresh");

此示例来自文档:http://jquerymobile.com/demos/1.0b1/docs/forms/forms-selects.html(页面底部)

更新

除了改变输入元素的值,你不需要做任何事情:

$('#editPartyName').val(party.name)

这是一个使用 jQuery Mobile 1.1.0 的演示:http://jsfiddle.net/VbAKL/

这是一个使用 jQuery Mobile 1.0B1 的演示:http://jsfiddle.net/VbAKL/1/

这个问题很有可能是因为您是按 ID 选择的,并且 DOM 中可能同时存在多个 ID 实例。 jQuery Mobile 网站一次可以在 DOM 中拥有多个“伪页面”,如果您在每个页面中都有一个 ID 为 #header 的元素,那么当您尝试为 #header 运行选择时,只有第一个实例将被退回。因此,您的 $('...').val(...) 函数调用可能正在工作,只是不在正确的元素上。

简短回答:使用 jQuery Mobile 时,确保您的 ID 在您网站的所有页面中都是唯一的。

【讨论】:

  • 感谢 Jasper 的帖子,我尝试了您的建议,但它不起作用...我不知道您是否熟悉简单的对话框插件,但我正在创建原始 HTML(即我在其中声明我的输入字段)并将其放入模态屏幕。输入字段显示正确,但我有上面提到的错误。当我将您给我的代码放在同一个侦听器上时(为模态声明 html 并触发它的单击),它实际上会杀死 $('#editPartyName').textinput('refresh'); 之后的所有执行。我不确定发生了什么...
  • jQuery Mobile 文档没有提到 .textinput() 方法。无论如何我都试过了,并得到“没有这样的方法'刷新'文本输入小部件实例”
  • @MaffooClock jquerymobile.com/demos/1.1.0/docs/forms/textinputs/methods.html。试试那个链接,它描述了.textinput() 方法。我原始答案中的链接是针对 jQuery Mobile 1.0 的第一个 Beta 版本。
  • @Jasper 啊,就是这样。感谢您分享这一澄清。但是,仍然没有文本输入的“刷新”方法。
  • @MaffooClock 是的,我继续创建了一个演示来检查我的原始答案是否可以成立,但它不能。您作为答案发布的解决方案表明您在 DOM 中一次有多个相同的 Id,因此通过#id 选择只会返回第一个元素,而input[id="id"] 将选择具有匹配属性的所有元素。跨度>
猜你喜欢
  • 1970-01-01
  • 2020-03-01
  • 2013-08-25
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
相关资源
最近更新 更多