只处理一次jQuery函数

时间:2012-11-22 13:46:56

标签: javascript jquery

HTML&安培; PHP

我列出了票证信息;

  <table>      
  <?php
  while($values = mysql_fetch_array($ticketInfo)){ 
    echo '<tr>';
    echo '<td id="ticketPrice">'. $values['ticket_price'] .'</td>';
    echo '<td id="myBonus">'. $values['bonus']*5 .'</td>';
    echo '<td><input type="checkbox" name="use_bonus" onclick="useMyBonus();"  id="myBonusId" /></td>';
    echo '</tr>';
  }      
  ?>
  </table>

当用户单击复选框处理jquery脚本以使用使用奖励计算折扣并将返回数据写入ticketPrice ID。但是有多个复选框,如果用户单击另一个复选框脚本再次计算,但我不这样做。我怎么才能处理一次?

我的jquery代码;

  function useMyBonus(){
    myBonus         = parseInt($("#myBonus").text());
    ticketPrice     = parseInt($("#ticketPrice").text());
    checked         = $("#myBonusId").is(':checked');



    if(checked == true){
        $("#ticketPrice").text(ticketPrice-(myBonus/2));

    }else{
        $("#ticketPrice").text(ticketPrice+(myBonus/2));

    }
} 

3 个答案:

答案 0 :(得分:1)

因为你在循环中创建了复选框所以所有复选框都有相同的id和'onclick'功能,所以每当你点击任何一个复选框时,函数都会调用,所以将唯一的id设置为复选框并设置函数:

$('#uniqueId').click(function(){
//do your work here
});

或在你的循环中将onclick函数设置为仅用于调用此函数的函数。

答案 1 :(得分:0)

您可以在复选框中使用任何标志来提醒操作已经执行(如addClass或jQuery.data),并在函数开始时检查该类或数据,如果它已经存在则只返回。

答案 2 :(得分:0)

这将确保您的复选框是唯一的 -

<table>      
<?php
$i=0;
      while($values = mysql_fetch_array($ticketInfo)){ 
        echo '<tr>';
        echo '<td id="ticketPrice">'. $values['ticket_price'] .'</td>';
        echo '<td>'. $values['bonus']*5 .'</td>';
        echo '<td><input type="checkbox" name="use_bonus" value="' .$i++ . "_" . $values['ticket_price']  . '"  /></td>';
        echo '</tr>';
      }      
      ?>
      </table>

这将遍历所有复选框并继续计算

 <script type="text/javascript">
    function useMyBonus()
    {
        var myBonus=0;


        checkboxes = document.getElementsByName('use_bonus');

        for(var i in checkboxes)
        {
            if(checkboxes[i].checked)

            {
                          var n=str.split("_");
                          //now your ticket price would be n[1], use n[1] for your bonus calculation 
                        //calculate myBonus         
            }           


        }
    }

    </script>