Jquery选择器表现得很奇怪

时间:2009-12-03 17:30:51

标签: jquery css-selectors

在我的html页面中,我写道:

$('div > input').click(function(){
            alert(1);             
});

我的div是这样的:

<div id="CPE202" class="course">
          <input type="checkbox" name="core" value="core" />
          Microprocessor programming
          <input type="radio" name="remove" value="remove" class="remove"/>
</div>

然后在此页面运行时它无法工作。这些代码的目的是在单击单选按钮时尝试提醒1。奇怪的是,当我使用Firebug进行调试时,我输入与上面的函数完全相同,并且它有效。这有什么不对?

谢谢。

[edit]我在这里提到的已经在正确的位置,意思是在$(文件)....

我也试过这个:

 $('div input').click(function(){
                alert(1);             
    });

和此:

 $('input:radio').click(function(){
                alert(1);             
    });

它们都不起作用。看起来我在这里使用的任何复杂选择器都没有用处:(

很抱歉我在这里遇到了困惑。我试过了

$('div > input').css({ border: '1px solid red' });

但它也不起作用。

另外1个信息是<div id=...>由另一段Jquery代码动态创建。我想知道是否是原因。

7 个答案:

答案 0 :(得分:4)

新答案(基于问题编辑):如果在注册事件侦听器后添加了元素,则这些侦听器将不适用于这些元素(事件侦听器显式添加到单个DOM节点,而不是“选择器”, DOM真的一无所知。最简单的解决方案是使用jQuery的live方法:

$('div > input').live('click', function() { ... });

live使用事件委派的基本实现:click DOM节点收到的document事件已从div > input冒出,jQuery将触发您的事件当事件冒泡时,该元素的监听器。

陈旧答案:您确定选择器是失败点吗?试试$('div > input').css({ border: '1px solid red' });,查看相关元素是否受到影响。如果是,那么一些早期注册的点击处理程序可能正在使用event.preventDefault()或其他一些阻止侦听器被触发的方法。

答案 1 :(得分:2)

上面的脚本是如何嵌入页面的?如何调用它?

您应该将其放在HTML的head部分,如下所示:

<html>
<head>
  <title>blah</title>
  <script type="text/javascript">
  $(function()
  {
    $('div > input').click(function(){
      alert(1);             
    });
  });
  </script>
</head>
<body>
  ...
</body>
</html>

答案 2 :(得分:1)

什么方法不起作用?你在执行onload的函数中有那些代码吗?像..

$(document).ready(myfunction)

答案 3 :(得分:1)

您需要触发此代码才能加载: 即包装你的陈述

$(function(){
  $('div > input').click(function(){
              alert(1);             
  });
});

当JQuery在页面加载时准备就绪时会触发它。

答案 4 :(得分:1)

确保您的代码放在$(document).ready(..)的回调中:

$(document).ready(function(){
    $('div > input').click(function(){
        alert(1);             
    });
});

答案 5 :(得分:0)

在这里工作。您确定在加载文档后调用了代码吗?像

$(function() {
    $('div > input').click(function(){
                alert(1);             
    });
})

答案 6 :(得分:0)

使用“each”遍历不同的元素并分配click事件。这有效:

   $(document).ready(function() {
       $('div > input').each(function() {
        $(this).click(function(){
                alert(1);             
        });
      });
   });