Функция jQuery не выполняется внутри цикла foreach PHP - PullRequest
0 голосов
/ 12 августа 2011

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

В цикле 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>

Ответы [ 3 ]

1 голос
/ 12 августа 2011

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

$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>";

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

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

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

Ура!

1 голос
/ 25 августа 2011

Вам не нужно использовать jQuery, чтобы усложнить это здесь.

Используйте это:

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

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

1 голос
/ 12 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...