无法正确提醒已选中复选框的ID

时间:2015-06-10 15:31:50

标签: javascript php jquery

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。但它的作用是, 当选中数组中的第一个复选框时,它不会发出任何警报!

当我取消选中它时,它会提醒“未检查”。然后对于数组中的第二个复选框,它会立即显示已选中并且未选中&#39;未选中&#39;什么时候不加以控制。

除此问题外,警报假设每次更改事件时都会显示一次。但它会记住点击复选框的次数以及弹出的次数。例如,第一个复选框首先检查但没有显示。所以我取消了它,(2次完成)。警报现在显示两次。我检查并取消选中第二个复选框(现在已经4次)。警报出现4次!

为什么会这样? SOmeone请解释一下。

2 个答案:

答案 0 :(得分:0)

您已将事件限制两次,首先执行此操作

<input type="checkbox" onchange="searchcourse()" />

然后你做

function searchcourse(param) {

    $("input[type=checkbox][id^=level]").change(function() {  

        // stuff

    });
}

因此每次触发更改事件时,searchcourse函数都会触发,并绑定一个新的事件处理程序,并且它会保持多次,2次,4次,8次等。

只需删除HTML中的onclick处理程序和函数,只保留jQuery事件处理程序

答案 1 :(得分:0)

你的功能是错误的,因为你在onchange事件中调用它并且这个函数也使用了事件更改,所以你遇到了关于有大量弹出窗口的问题。

我建议使用的是使用onclick事件并调用你的函数,但只需使用你的if代码

function searchcourse(check,param){
 if($(check).is(":checked"))  alert($(check).attr("id"));
 else alert("not checked");
}

我希望它有所帮助

此致