【问题标题】:Javascript focus does not work on dynamically loaded input boxJavascript焦点不适用于动态加载的输入框
【发布时间】:2014-07-01 19:35:35
【问题描述】:

我在具有输入元素的模板中有一个 HTML 标记。我通过 Ajax 调用加载它并使用 jQuery 的 $(selector).html(response) 放入现有的 html。

基本上它是一个从模板加载的弹出框。加载弹出框后,我想将焦点设置在输入框上。我已经写了这段代码:

$("#prescribe-input").focus() 将内容附加到现有 HTML 之后,但它不起作用。我也试过用传统的javascript方式来做document.getElementById("prescribe-input").focus()

两者都不起作用。出于测试目的,我尝试在应用程序的 Index.html 中创建示例输入框并设置焦点。它完美地工作。问题是当我使用 $().html() 从模板加载 html 时它不起作用。

有什么方法可以正确对焦吗?

我知道这里的代码非常少,但我相信这个问题是不言自明的。

【问题讨论】:

  • 你必须包括最小的例子来复制你的问题,不清楚你的问题是什么,可能是很多事情
  • 如果元素存在并且选择器是正确的,那么在动态元素上设置焦点就可以了。

标签: javascript jquery html ajax


【解决方案1】:

如果您使用jquery,那么您可以在动态生成的元素上使用.on()

$("#prescribe-input").on( "focus", function() {
  //do what ever you want
});

【讨论】:

  • 委托事件处理程序究竟如何与设置元素的焦点一起工作?
  • 不管怎样,你不是在这里委派活动
【解决方案2】:

你应该在回调函数中这样做:

$(selector).html(response, function(){
   $("#prescribe-input").focus();
})

【讨论】:

  • 这有什么关系,html() 是同步的?
  • 可能是 OP 在追加内容之前将焦点放在了焦点上。
  • OP 可能是,但是对同步方法使用回调并没有真正的帮助?
  • 我刚刚又读了一遍,我认为有 id 重复。另一个具有相同id 的元素很可能在那里可用。
  • 没有其他ID作为同一元素。我确保仅在附加 HTML 元素后才调用聚焦逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
相关资源
最近更新 更多