php&html
<?php
$param=$_GET['param'];
$sql= "SELECT * FROM categories,main_category WHERE categories.main_cat_id=main_category.main_cat_id AND categories.main_cat_id='$param'";
$stmt = $pdo->query($sql);
?>
<table class="small-12 medium-12 large-12 medium-centered large-centered columns pop_tbl"><tr>
<?php
$i=0;
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$i++;
//echo $i;
?>
<td>
<label for="level_<?php echo $row['catid'];?>">
<input type="checkbox" class="level" id="level_<?php echo $row['catid'];?>" value="<?php echo $row['catid'];?>" onchange="searchcourse('<?php echo $row['catid'];?>')">
<span></span>
<?php echo $row['catname'];?>
</label>
</td>
<?php
if($i==2)
{
echo"</tr><tr>";
$i=0;
}
}
?>
</tr></table>
脚本
function searchcourse(param)
{$("input[type=checkbox][id^=level]").change(function() {
if($(this).is(":checked")) {
alert($(this).attr("id"));
} else {
alert("not checked");
}
});
}
情况是,当选中该复选框时,将调用 searchcourse 函数。我希望这个函数能够识别复选框是否被单击,然后提醒选中的复选框的 ID。但它的作用是, 当选中数组中的第一个复选框时,它不会发出任何警报!
当我取消选中它时,它会提醒“未选中”。然后,对于数组中的第二个复选框,它在选中时立即表示已选中,在未选中时表示“未选中”。
除此问题外,警报应该在每次事件更改时出现一次。但它会记住单击复选框的次数以及弹出的次数。例如,第一个复选框首先被选中,但什么也没显示。所以我取消了它,(已经两次了)。该警报现在显示两次。当我选中并取消选中第二个复选框时(现在已经选中了 4 次)。所以警报出现了 4 次!
为什么会这样呢?有人请解释一下。
最佳答案
您已绑定(bind)事件两次,首先执行此操作
<input type="checkbox" onchange="searchcourse()" />
然后你就这么做了
function searchcourse(param) {
$("input[type=checkbox][id^=level]").change(function() {
// stuff
});
}
因此,每次更改事件触发时,searchcourse
函数都会触发,并绑定(bind)一个新的事件处理程序,并且它会不断乘法,2 次、4 次、8 次等。
只需删除 HTML 中的 onclick
处理程序和函数,仅保留 jQuery 事件处理程序
关于javascript - 无法正确提醒已选中复选框的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760867/