Функция jQuery не выполняется внутри цикла PHP foreach

Я пытаюсь создать несколько флажков для панели фильтров, которая при проверке обновит список продуктов, учитывающих определенный параметр.

В цикле foreach я успешно создаю флажки, собирая атрибуты фильтра из данных xml, вызывается из API

foreach ($attrib->attributeValues->attributeValue as $attribValue) { $attribValue = $attribValue->name; $attribValueID = $attribValue[@id]; $BODY .= sprintf("<input type=\"checkbox\" name=\"%s\" value=\"%s\" id=\"%s\" checked%s=\"checked\" /> %s ", $attribClass, $attribValue, $attribValue, $attribValue, $attribValue); 

Затем я тестирую базовую функцию jQuery с двумя простыми предупреждениями, чтобы гарантировать, что функции на самом деле вызываются

 $BODY .= "<script type=\"text/javascript\">"; $BODY .= "alert('Hello world!');"; $BODY .= "$(\"#".$attribValue."\").change(function() {"; $BODY .= "var $input = $(this);"; $BODY .= "alert(\"".$attribValue."\");"; $BODY .= "}).change();</script>"; 

Когда я запускаю это на странице, отображаемый исходный код html определенно показывает, что генерируется функция jQuery (несколько раз, по одному для каждого созданного флажка), но я не вижу ни одного из предупреждений – тот, который находится вне функции, или внутри. Это мой первый опыт работы с jQuery – какие-то мысли? Спасибо, как всегда!

Изменить: Извините, вот сгенерированный исходный код HTML для двух флажков – это продолжается для всех отмеченных флажков, которые находятся в двойных цифрах.

 <input type="checkbox" name="Color" value="Black" id="Black" checkedBlack="checked" /> Black <script type="text/javascript">alert('Hello world!');$("#Black").change(function() {var = $(this);alert("Black");}).change();</script> <input type="checkbox" name="Color" value="Silver" id="Silver" checkedSilver="checked" /> Silver <script type="text/javascript">alert('Hello world!');$("#Silver").change(function() {var = $(this);alert("Silver");}).change();</script> 

Вот мое обновленное исправление.

 $BODY .= "<script type=\"text/javascript\">"; $BODY .= "$(document).ready(function(){"; $BODY .= "alert('Hello world!');"; $BODY .= "$(\"#".$attribValue."\").live('click',function() {"; $BODY .= "var \$input = $(this);"; $BODY .= "alert(\"".$attribValue."\");"; $BODY .= "}).click();});</script>"; 

вы можете увидеть пример этого вывода в этой скрипке

Мне пришлось писать в $(document).ready() а также избегать $input php в php, чтобы убедиться, что он не отображается как строка php. Я также изменил .change() на .live('click', и .click()

живая часть обеспечит отображение динамически загруженных флажков. Я просто предпочитаю событие click, вы можете настроить его, если хотите.

Ура!

Я думаю, что вы переписываете $attribValue здесь: $attribValue = $attribValue->name; – вы можете использовать другую переменную для хранения этого значения: $myAttribValue = $attribValue->name;

Вам не нужно использовать jQuery для чрезмерного компрометирования этого здесь.

Использовать это:

 function filterToggle(element){ var elementII = document.getElementById(element) if(elementII.checked){ alert("Checked"); } else{ alert("Unchecked"); } } 

затем добавьте onclick = "filterToggle ('% s')" в свои флажки