我正在开发一个简单的程序,用于教你(我)如何使用8pen键盘为Android编写。
在每个keydown上,我检查输入值是否与html更改的“pattern-attribute”匹配,以便出现新课程。这很好用。但是当我更新keyup函数时会停止触发。
var lesson = 0;
$(document).ready(function() {
new_lesson(lesson)
lesson++
//den här grejjen aktiverar inte på lektion 2
$("input").keyup(function(event){
var value = $(this).val();
console.log(value)
if (isValidInput ('input')) {
new_lesson(lesson);
}
})
});
function isValidInput (input) {
return $(input)[0].checkValidity();
}
function new_lesson(lesson_number){
$('#form').html('<label>'+data[lesson_number]+'</label> <input type="text" pattern="'+data[lesson_number]+'"/>')
}
为什么?
答案 0 :(得分:1)
您的事件已设置为html代码中的最后一个输入,并且您重写了该部分,因此事件也会丢失。你需要将事件设置放在new_lesson函数中。
答案 1 :(得分:1)
每次更换html时,都会创建一个输入元素的新实例,因此事件处理程序就会消失。
尝试$('input').live('keyup',handler())
;
答案 2 :(得分:1)
而不是
$("input").keyup(function(event){
使用
$("input").live('keyup',function(){
live处理程序也附加到将来声明的类型。最初,当您使用.keyup
时,它只是将处理程序附加到您之前定义的输入。在使用.live
时,它将处理程序附加到已定义的所有输入元素和&amp;即将被定义的未来。
编辑:从jQuery 1.7开始,不推荐使用.live()方法。使用.on(与实时用法相同)
答案 3 :(得分:1)
绑定事件会直接将事件处理程序注册到DOM元素<input>
。当您在更新密钥时更新<input>
时,该事件不再注册到该新元素。
而不是使用.bind()
:
$("input").keyup(function(event){
使用.on()
,它适用于注册事件后添加到页面的所有元素:
$("input").on("keyup", function(event){
请参阅此excellent post for the differences between .bind() and .on()
答案 4 :(得分:1)
对于动态生成的元素,您应该委派事件,您可以使用on()
方法,尝试以下方法:
.on(events [,selector] [,data],handler(eventObject))
$("#form").on('keyup', 'input', (function(event){
// ....
})