jQuery通过单击静态元素隐藏动态生成的元素

时间:2011-03-24 19:10:22

标签: jquery binding keyboard-shortcuts

我一直在寻找答案,但我还没有找到专门解决这个问题的stackoverflow上的东西。

基本上,我有一些由jQuery动态生成的无线电元素(虽然在页面加载后 - 当文本输入到输入字段时它们被加载),我需要检查这些动态加载的无线电元素{ {1}}事件。

如果我点击动态加载的元素,我可以使用keyup函数。但是,当我在一个标准DOM元素输入字段(即不是由jQuery生成)内聚焦时,我需要在发生某个live事件时检查这些元素。

请注意,keys数组只是一个带有数字keyCode值的键的关联数组。

因此,以下内容不起作用:

keyup

因为DOM准​​备好了动态生成的无线电元素。有办法解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

是什么让你说以下内容?

  

因为在DOM就绪时没有动态生成的无线电元素

这应该不是问题。你的情况更有可能永远不会被触发。以下是一些尝试:

  1. 使用k.which代替k.keyCode
  2. 在事件处理程序的case语句中放置一个alert(),看它是否甚至被触发。就像是: alert("event. Found " + $("#dynamicallyGeneratedElement").length + " elements");
  3. 这两件事应该可以帮助你调试问题。

答案 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准备好的单选按钮完全没有关系 - 唯一重要的是当你的功能需要与它们交互时它们就存在了。

可能有所帮助的一些事情:

  1. 如上所述,keyCode往往有点儿错误,具体取决于您使用的浏览器。我通常会使用这张支票:

       if(window.event) // (IE)
       {keynum = k.keyCode;}
       else if(k.which) // (other browsers)
       {keynum = k.which;}
    

    这样,您可以确定无论环境如何,您的变量都被正确分配。

  2. 您使用switch的任何原因?如果您只测试一个条件,只需使用简单的if语句。

  3. 使用jQuery方法inArray()来测试你的keypress变量是否在key ['up']数组中。

  4. 最后 - 不确定这是否重要(不要认为它),但我更喜欢使用checked =“checked”作为单选按钮而不是checked =“true”。我认为它的工作原理是一样的,但是要把它打开。