Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在主干视图渲染后将焦点设置在输入上_Javascript_Jquery_Backbone.js_Coffeescript - Fatal编程技术网

Javascript 在主干视图渲染后将焦点设置在输入上

Javascript 在主干视图渲染后将焦点设置在输入上,javascript,jquery,backbone.js,coffeescript,Javascript,Jquery,Backbone.js,Coffeescript,我有一个带有登录表单的视图,我正在尝试在视图呈现后设置焦点。我试过这个,但没用: class App.Views.Login extends Backbone.View template: template("login") events: "click button": "login" render: -> @$el.html @template(@) @$el.find("#email").focus() 也试过这个, class App.

我有一个带有登录表单的视图,我正在尝试在视图呈现后设置焦点。我试过这个,但没用:

class App.Views.Login extends Backbone.View
  template: template("login")

  events:
    "click button": "login"

  render: ->
     @$el.html @template(@)
     @$el.find("#email").focus()
也试过这个,

class App.Views.Login extends Backbone.View
  template: template("login")

  events:
    "click button": "login"

  render: ->
     @$el.html(@template(@)).ready =>
       @$el.find("#email").focus()
添加路由器以显示登录如何连接到DOM:

class App.Routers.App extends Backbone.Router
  initialize: ->
    chrome = new Spokely.Views.Chrome el: $("#app")
    chrome.render()
    @mainEl = $("#main")

  routes:
    "": "index"
    "ad/:id": "show"
    "about": "about"
    "login": "login"
    "signup": "signup"

  login: ->
    view = new Spokely.Views.Login()
    @mainEl.html view.render().el

我遗漏了什么?

尽管您在视图中设置了焦点,但当您将登录视图附加到主DOM时,焦点被重置(不再聚焦)。尝试:

Login
视图附加到主DOM后,使用Jquery调用focus方法。这肯定会奏效

或者,您可以将“#main”作为el传递给登录视图本身。比如:

login: ->
        view = new Spokely.Views.Login el: $("#main")
        view.render()

然后你不需要向路由器添加代码,你的初始代码应该可以工作。

这篇文章很旧,但我还是想在这里回答,因为它可能会帮助别人。有一种更好、更简单的方法。我们可以使用onDomRefresh事件来设置焦点。只要视图已渲染、显示,然后重新渲染,都将调用onDomRefresh事件。 我们可以使用它如下:

onDomRefresh:function(){
  @$el.find("#email").focus()
}

希望这对某人有所帮助。

我不熟悉这种语法。哪种语言?咖啡脚本。如何将
登录
视图附加到主DOM?你能添加代码吗?添加路由器是为了澄清。奇怪的是,即使在这个视图中呈现了所有内容,并且我在开发人员控制台中执行了上面的操作,它仍然不起作用。知道为什么吗?在我看来似乎是可疑的。当使用开发人员控制台进行调试时,焦点由控制台窗口本身承担。所以焦点不在textbox.Gotcha上。是的,上面的剪辑成功了。我只是希望这样的东西不要出现在路由器上,因为在我看来这与路由器无关。另一种工作方式是将
'#main'
作为
el
传递给
登录
视图本身。例如:
view=newspokely.Views.Login el:$(“#main”)
。然后你不需要向路由器添加代码,你的初始代码应该可以工作。(如果这种方法对你有效,那么我可以将其附加到答案中以帮助他人)啊……很好。是的,我更喜欢这个,b/c我觉得重点是关注视图。onDomRefresh仅适用于木偶,不是吗?
onDomRefresh:function(){
  @$el.find("#email").focus()
}