【问题标题】:Can't set focus() on a text field无法在文本字段上设置焦点()
【发布时间】:2010-11-30 04:51:25
【问题描述】:

这只是最奇怪的事情。我有一个 Sammy.js 应用程序,我想在 HTML 加载后立即将焦点设置在文本字段上。我这里有这个 CoffeeScript:

this.partial('templates/my-template.jqt').then ->
  i = $('#item')
  debugger
  i.focus()

当我在调试器中时,就在那一行,我可以检查“i”并看到它是一个 JQuery 对象。我什至可以调用 i.val("HI THERE!") 并查看我的文本字段更新。但是,调用 i.focus() 绝对没有任何作用。我是否缺少某些安全功能,无法让您专注于动态加载的文本元素?

【问题讨论】:

  • 顺便说一句,你怎么知道你可以在部分上做什么“.then”?对于我的一生,我无法弄清楚 Sammy.js api 文档中的“部分”方法返回什么。你是怎么弄清楚这些东西的?

标签: javascript sammy.js


【解决方案1】:

试试:

setTimeout(function() { $('#item').focus() }, 1);

这是很常见的问题。出于某种原因,将焦点延迟 1 毫秒使其工作。

【讨论】:

  • 什么。这。见鬼。 +1000 个互联网
【解决方案2】:

JQuery 的 focus() 不关注一个元素,它绑定一个事件处理程序来获得焦点。 http://api.jquery.com/focus/

改用 i.get().focus()。

【讨论】:

  • 实际上,当我执行 $('input[type=text]').focus() 时,它适用于 Chrome,但不适用于 iOS。这是实际文件:github.com/pkulak/mealfire_mobile/blob/master/coffeescripts/…
  • 当我在 Chrome 中尝试 i.get().focus() 时,我得到“Uncaught TypeError: Object [object HTMLInputElement] has no method 'focus'”。
  • 另请参阅:“JQuery 的 focus() 不关注元素,它将事件处理程序绑定到焦点”:没有参数,它不绑定事件处理程序;它触发一个。
  • LarsH,那是因为你在一个元素数组上调用 focus()。你可以这样做: i.get(0).focus() 代替。
【解决方案3】:

如果你确定你得到了$('#item') 对象。你可以尝试一些事情。

确保您只有一个<input type="text" id="item" />的输入框。相同的id不应重复。

接下来你为什么不试试$('#item').focus()

谢谢。 关于,

瓦西姆

【讨论】:

    【解决方案4】:

    这样做:

    i.trigger 'focus'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多