我一直在寻找答案,但我还没有找到专门解决这个问题的stackoverflow上的东西。
基本上,我有一些由jQuery动态生成的无线电元素(虽然在页面加载后 - 当文本输入到输入字段时它们被加载),我需要检查这些动态加载的无线电元素{ {1}}事件。
如果我点击动态加载的元素,我可以使用keyup
函数。但是,当我在一个标准DOM元素输入字段(即不是由jQuery生成)内聚焦时,我需要在发生某个live
事件时检查这些元素。
请注意,keys数组只是一个带有数字keyCode值的键的关联数组。
因此,以下内容不起作用:
keyup
因为DOM准备好了动态生成的无线电元素。有办法解决这个问题吗?
答案 0 :(得分:1)
是什么让你说以下内容?
因为在DOM就绪时没有动态生成的无线电元素
这应该不是问题。你的情况更有可能永远不会被触发。以下是一些尝试:
k.which
代替k.keyCode
。alert()
,看它是否甚至被触发。就像是:
alert("event. Found " + $("#dynamicallyGeneratedElement").length + " elements");
这两件事应该可以帮助你调试问题。
答案 1 :(得分:0)
当您生成动态内容时(通过append或ajax调用),您可以创建一个回调函数,然后为您执行绑定。
如果您需要实际代码的帮助,您实际上必须显示用于动态添加内容的代码。
答案 2 :(得分:0)
尝试jQuery委托:
$('body').delegate('#inputField', 'keyup', function(k) {
switch (k.keyCode) {
case keys['up']:
$('#dynamicallyGeneratedElement').attr('checked', true);
break;
}
});
$('body')
是一个昂贵的选择器,尝试使用#inputField
元素的直接父容器。让我知道它是怎么回事。
答案 3 :(得分:0)
我同意布兰登的说法,在DOM准备好的单选按钮完全没有关系 - 唯一重要的是当你的功能需要与它们交互时它们就存在了。
可能有所帮助的一些事情:
如上所述,keyCode
往往有点儿错误,具体取决于您使用的浏览器。我通常会使用这张支票:
if(window.event) // (IE)
{keynum = k.keyCode;}
else if(k.which) // (other browsers)
{keynum = k.which;}
这样,您可以确定无论环境如何,您的变量都被正确分配。
您使用switch
的任何原因?如果您只测试一个条件,只需使用简单的if语句。
使用jQuery方法inArray()
来测试你的keypress变量是否在key ['up']数组中。
最后 - 不确定这是否重要(不要认为它),但我更喜欢使用checked =“checked”作为单选按钮而不是checked =“true”。我认为它的工作原理是一样的,但是要把它打开。