2012-03-27 124 views
1

一個函數,在更新任何輸入字段時使用jquery對錶進行計算。它工作正常,但我需要能夠調用它時,我加載數據更新特定的行。我似乎無法正常工作,無論它更新時,輸入字段的變化,它不會工作,當我打電話來更新特定的行。Jquery將參數傳遞給函數無法正常工作

我試圖傳遞一個參數到函數中,告訴哪些行更新,當我需要它,當它檢測到一個變化事件時,它檢查變量是否被傳入。我試圖檢查傳入的變量是未定義或null,但我似乎無法開始工作。我究竟做錯了什麼?

我的代碼;

所以一個調用來更新某一行;

//////////////////////////////////////////// 
//load prices and pid from range selected 
//////////////////////////////////////////// 

$(document).ready(function(){ 
    $("#range_select").change(function(event){ 

    //get the range id 
    $id=$("#range_select").val(); 

    var i; 
    var loadedValues; 
    var result; 
    var pid; 

    loadedValues=0; 

    //clear All the prices if loaded, reset background color 
    $(".price").val(0); 
    $(".price").css("background-color","#FFF"); 

    //clear ALL product id 
    $(".productid").val(0); 
    /////////////////////////////////////////////////////////// 

    //note the url will break if site changed 
    $.ajax({url:"/mysite/products/list_products_from_range/"+$id, success:function(result){  

     /*if(result.length==0){ 
      //no results from ajax request 
      alert('No products found for this range.); 
      return false; 
     }*/ 

     //parse the returned JSON object,for each parse of result we check the table 
     $.each(jQuery.parseJSON(result), function() {  

      //console.log("product id="+this['Product']['id']); 

      pid=this['Product']['id']; 
      var price=this['Product']['price']; 
      var height=this['Product']['height']; 
      var width=this['Product']['width']; 

      /*console.log("price="+price); 
      console.log("h="+height); 
      console.log("w="+width);*/ 


      ///////////////////////////////////////////////////////////// 
      //now we have to go through the table and insert the values  

      i=-1; 

      var rows = $("#productentry tr:gt(0)"); // skip the header row    
      rows.each(function(index) {  

       i++; 
       var h = $("td:eq(3) .h", this).val(); 
       var w = $("td:eq(4) .w", this).val(); 

       //console.log(h +'x'+w);     
       //console.log("if "+w+" = "+width+" and "+h+" = "+height);    
       //console.log('index='+index); 


       if(w==width && h==height){ 
        //increment count of loaded values 
        loadedValues++; 

        //set the price 
        $("#listprice_"+i).val(price); 

        //set the pid 
        //alert(pid); 
        $("#productid_"+i).val(pid); 

        //change price textbox to visually show its chnaged 
        $("#listprice_"+i).css("background-color","#F60"); 

        //update totals (notworking) 
        calculateTotal(i);     

        return false; 
       } 

      }); 

      ///////////////////////////////////////////////////////////// 


     }); 
     alert('loaded '+loadedValues+' prices'); 


    }});  



    });//end click event 
}); 


///////////////////////////////////////////////////// 
//any input field that changes updates the calculation, not working fully i.e load product prices 
///////////////////////////////////////////////////// 
$(document).ready(function(){ 
    $(":input").change(calculateTotal); 
}); 


//////////////////////////////////// 
//calculate total 
/////////////////////////////////// 
var calculateTotal = function(index){ 

    var $discountpercent = null; 
    var $total=null; 
    var $quantity=null; 
    var $id=null; 
    var $marginpercent=null; 
    var $margintotal=null; 
    var myArray=null; 

    console.log('index='+index + ' indexlen= '+index.length); 

    if(index === undefined){  
     console.log('getting id'); 
     //get id of textbox 
     $id=$(this).attr('id'); 
     //get the row id 
     $id=$id.toString(); 
     myArray = $id.split('_'); 
     $id=myArray[1]; 
    } 
    else 
    { 
     console.log('setting id=index'); 
     $id=index;  
    } 

    var $listprice= $("#listprice_"+$id).val(); 

    //turn entered number into % 
    $discountpercent= $("#discountpercent_"+$id).val()/100; 
    $discountlistprice=$listprice-($listprice*$discountpercent);  

    //turn margin to % (note margin is global) 
    $marginpercent= $("#marginpercent_"+$id).val()/100; 

    //apply margin % to DLP 
    if($discountlistprice>0) 
    { 
     $margintotal=$discountlistprice+($discountlistprice*$marginpercent); 
    } 
    else 
    { 
     $margintotal=0; 
    } 

    //set rrp 
    $rrp=$margintotal; 
    $("#rrp_"+$id).val($rrp); 

    //quantity 
    $quantity=$("#quantity_"+$id).val(); 

    //calculate total 
    $total=$quantity*$rrp; 

    //set the value 
    $("#discountlistprice_"+$id).val($discountlistprice); 

    //set the total by changing the total div 
    $("#total_"+$id).html($total); 

} 
+0

你並沒有顯示在您嘗試並調用該函數。任何jQuery事件處理程序的第一個參數是'event'對象。 – Pointy 2012-03-27 13:05:53

+0

我現在發佈了 – 2012-03-27 13:15:20

回答

3

更改您的處理程序,以匿名函數:

$(document).ready(function(){ 
    $(":input").change(function() { 
     var index = getIndex(); // however you are getting this value 
     calculateTotal(index); 
    }); 
});