jQuery函数不在PHP foreach循环中执行

时间:2011-08-11 20:58:23

标签: php javascript jquery foreach

我正在尝试为过滤器面板生成一些复选框,在选中时会刷新考虑特定参数的产品列表。

在foreach循环中,我通过从API调用的xml数据中收集过滤器属性来成功创建复选框

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 个答案:

答案 0 :(得分:1)

我认为你在这里覆盖$attribValue$attribValue = $attribValue->name; - 你应该可以使用另一个变量来存储该值:$myAttribValue = $attribValue->name;

答案 1 :(得分:1)

这是我更新的修复程序。

$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()中写入以及在php中转义$input以确保它不会呈现为php字符串。我还将.change()更改为.live('click',.click()

实时部分将确保看到动态加载的复选框。我只是喜欢点击事件,如果您愿意,可以将其设置为更改。

干杯!

答案 2 :(得分:1)

这里不需要使用jQuery来复杂化。

使用此:

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

然后在您的复选框中添加onclick =“filterToggle('%s')”