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()
}