Я пытаюсь создать несколько флажков для панели фильтров, которая при проверке обновит список продуктов, учитывающих определенный параметр.
В цикле 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')" в свои флажки