【问题标题】:Nested 'on' click and keypress functions not working?嵌套的“on”点击和按键功能不起作用?
【发布时间】:2014-09-22 20:45:32
【问题描述】:
  element.on("click", function(){
    element[0].querySelector("input").focus()
    element[0].querySelector("input").on('keypress',function(key){
        console.log(key)
    }
  })

这会返回这个错误:

Uncaught TypeError: undefined is not a function 
runner:18(anonymous function) 
runner:18(anonymous function) 
angular.js:2843forEach 
angular.js:325eventHandler

还有JSBin

谢谢!

【问题讨论】:

  • 它会为接下来的按键注册事件,不是吗?
  • 通常如果有错误,我们能够看到它会很棒;)
  • 您发布的示例中有语法错误。您是否检查了控制台日志以确保您已修复任何语法错误?
  • 分号键坏了? :)
  • JavaScript 中不需要分号,但它们是很好的做法。这里没有语法错误。

标签: javascript jquery


【解决方案1】:

querySelector 返回一个 DOM 对象。 .on 函数是一个 jQuery 函数。你需要把它包装起来:

$(element[0].querySelector("input")).on('keypress',function(key){
    console.log(key)
}

另外,我会厌倦在其他事件处理程序中添加事件处理程序。每当您单击元素时,都会添加 keypress 事件。如果您单击该元素 5 次,则输入现在将有 5 个活动按键事件,除非您在某个时候将其删除。仅当您意识到这些影响时才应该这样做 - 即使这样,它也会使代码难以遵循。

【讨论】:

  • “另外,我会厌倦在其他事件处理程序中添加事件处理程序。”为什么会这样?
  • @Ninsly 我会将该信息添加到答案中。
  • 是的,将其添加到答案中,也许还有.unbind('keypress') ?
  • @jwatts1980 谢谢,我刚刚添加并删除了评论。
  • @MohamedElMahallawy 可以,但根据documentation,最好使用.off('keypress')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2017-11-14
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多