Путаница со Знаком доллара jQuery

#javascript #jquery #events #onclick #dollar-sign

#javascript #jquery #Мероприятия #onclick #знак доллара

Вопрос:

Я немного сбит с толку знаком доллара в jQuery и надеялся, что кто-нибудь сможет мне помочь.

У меня есть следующее объявление функции:

 $(function() {
    $( "#create-discussion" ).button().click(function() {
        alert("Clicked");
    });

    $( "#listitems tr" ).click(function(event) {
        alert("clicked");
    });
});
  

По какой-то причине первое объявление функции для кнопки «создать-обсуждение» работает отлично; при нажатии появляется всплывающее окно. Однако второй вариант не работает, и при нажатии на строки таблицы всплывающее окно не генерируется.

Это какой-то нюанс в отношении onClicks кнопок по сравнению с onClicks строк таблицы? Я упускаю что-то глупо очевидное?

Кроме того, я думаю, что было бы очень полезно, если бы кто-нибудь объяснил, что $(function() {}) на самом деле делает, как я к этому отношусь $(document).ready() , и я не уверен, смогу ли я это сделать.

Комментарии:

1. Это в точности сокращенный вариант для обработчика событий document ready. Эти два функционально эквивалентны. То есть это не ваша проблема.

2. Просто попробуйте преобразовать $("#listitems tr") в $("#listitems tr td") . (Просто мысль.)

3. Существуют ли строки таблицы, когда привязывается обработчик $ («#listitems tr»)? Имейте в виду, что обработчики событий традиционно работают только с существующими элементами. Если вы хотите тот, который работает с будущими элементами, вам нужно использовать живые обработчики ( api.jquery.com/live ).

4. Что это за button() функция?

5. Майк, я думаю, ты, возможно, попал в точку — моя таблица динамически заполняется способом запроса к серверу после вызова этого кода. Просматриваю ссылку на живые обработчики, о которой вы упомянули сейчас. 🙂 Пожалуйста, отправьте ответ, чтобы я мог отдать вам должное!

Ответ №1:

Знак доллара ( $ ) на самом деле является псевдонимом для jQuery функции. И согласно документации, если вы передадите обратный вызов в качестве аргумента этой функции, он будет выполнен, когда DOM будет готов.

Что касается второй части вашего вопроса (о том, почему вторая часть кода не работает): просто проверьте селекторы. Для меня это работает отлично (см. jsfiddle — это без .button() метода, потому что я не загружаю пользовательский интерфейс jQuery), так что это может быть вызвано неправильными селекторами.

Ответ №2:

То, что вы делаете, должно работать до тех пор, пока в вашем тексте селектора «#listitems tr» есть что-то действительное для выбора.

Вы можете протестировать, выполнив … если результат равен 0, это означает, что jQuery не нашел ни одного допустимого элемента

 alert($("#listitems tr").length);
  

Когда вы выполняете вызов

 $("a").click(function(evt) { alert("hello world!"); });
  

Вы привязываете событие click ко всем тегам <a> на своей странице. Вы вполне могли бы сделать то же самое с …

 $("a").click(myFunc);
function myFunc(evt) { alert("hello world!"); }
  

Функция click может быть прикреплена к любому html-элементу. Это не обязательно должна быть кнопка, это может быть , , и т.д. Элемент даже не обязательно должен быть видимым, хотя вы сможете запустить щелчок, только если вызовете фактическое событие, выполнив …

$(«a»).click();

$ («…») — это просто сокращение для ввода jQuery («…»)

Надеюсь, это ответит на ваши вопросы.