Селекторы Jquery ведут себя странно - PullRequest
0 голосов
/ 03 декабря 2009

На моей 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, я набираю точно так же, как функция выше, и это работает. Что здесь не так?

Спасибо.

[править] То, что я здесь упомянул, уже на правильном месте, то есть внутри $ (документ) ....

Я также пробовал это:

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

и это:

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

Они оба не работают. Кажется, что любой сложный селектор, который я здесь использую, бесполезен: (

Извините за путаницу, которую я сделал здесь. Я попробовал

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

но это тоже не работает.

1 дополнительная информация: <div id=...> ДИНАМИЧЕСКИ создан другим фрагментом кода Jquery. Мне интересно, является ли это причиной для этого.

Ответы [ 7 ]

4 голосов
/ 03 декабря 2009

Новый ответ (на основе редактирования вопроса): если после регистрации прослушивателей событий добавляются элементы, эти прослушиватели не будут применяться к этим элементам (прослушиватели событий явно добавляются к отдельным узлам DOM, а не к «селекторам», которые DOM действительно ничего не знает). Самым простым решением этого является использование метода live в jQuery:

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

live использует базовую реализацию делегирования события: событие click, полученное узлом document DOM, всплыло с div > input, и jQuery вызовет ваш прослушиватель событий для этого элемента, когда событие вспыхнет до.

Старый ответ: Вы уверены, что селекторы являются точкой отказа? Попробуйте $('div > input').css({ border: '1px solid red' }); и посмотрите, затрагиваются ли рассматриваемые элементы. Если это так, скорее всего, некоторые ранее зарегистрированные обработчики кликов используют event.preventDefault() или другие средства, предотвращающие срабатывание слушателей.

2 голосов
/ 03 декабря 2009

Как сценарий выше встроен в страницу? Как это вызывается?

Вы должны разместить его в разделе заголовка вашего HTML-кода следующим образом:

<html>
<head>
  <title>blah</title>
  <script type="text/javascript">
  $(function()
  {
    $('div > input').click(function(){
      alert(1);             
    });
  });
  </script>
</head>
<body>
  ...
</body>
</html>
1 голос
/ 03 декабря 2009

Убедитесь, что ваш код помещен в обратный вызов для $(document).ready(..):

$(document).ready(function(){
    $('div > input').click(function(){
        alert(1);             
    });
});
1 голос
/ 03 декабря 2009

Вам нужно вызвать этот код для загрузки: То есть заверните ваше заявление

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

Который запустит его, когда JQuery будет готов при загрузке страницы.

1 голос
/ 03 декабря 2009

Что значит не может работать? у вас есть этот код внутри функции, которая выполняется на нагрузке? как ..

$(document).ready(myfunction)
0 голосов
/ 03 декабря 2009

Циклически перебирая различные элементы, используя «каждый» и назначайте событие клика. Это работает:

   $(document).ready(function() {
       $('div > input').each(function() {
        $(this).click(function(){
                alert(1);             
        });
      });
   });
0 голосов
/ 03 декабря 2009

работает здесь. Вы уверены, что ваш код вызывается после загрузки документа? как

$(function() {
    $('div > input').click(function(){
                alert(1);             
    });
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...