0

编辑:感谢您的回复!不幸的是,使用 .trigger('change') 或 .change() 手动运行事件无法正常工作。如果用户更改了一组单选按钮的值,但没有更改另一组,则数学不会相加。还有其他建议吗?

我有这个表格

它主要按我的意愿工作,但我希望 jquery 函数在页面加载以及用户更改单选按钮选择时运行。我该怎么做?

var price=$("input[name='courierrepairprice']").val();
price = Number(price.replace(/[^0-9\.]+/g,""));
var postage_out=0;
var postage_in=0
$("input[name='outwardpostage']").change(function()
{
   postage_out=$(this).val();
   tot_price=parseFloat(price,10)+parseFloat(postage_out,10)+parseFloat(postage_in,10)
   tot_price=tot_price.toFixed(2)

   $('.tot_price').text('£'+tot_price); 
});
$("input[name='returnpostage']").change(function()
{
   postage_in=$(this).val();   
   tot_price=parseFloat(price,10)+parseFloat(postage_out,10)+parseFloat(postage_in,10)
   tot_price=tot_price.toFixed(2)
   $('.tot_price').text('£'+tot_price);
});
4

5 回答 5

2

使用.trigger('change')或 .change() 手动模拟事件

var price=$("input[name='courierrepairprice']").val();
price = Number(price.replace(/[^0-9\.]+/g,""));
var postage_out=0;
var postage_in=0;

function calculate(){
    console.log('calc', price, postage_out, postage_in)
    var tot_price = price + postage_out + postage_in;
    tot_price=tot_price.toFixed(2)

    $('.tot_price').text('£' + tot_price);
}

$("input[name='outwardpostage']").change(function() {
    postage_out = parseFloat($(this).val());
    calculate();
}).filter(':checked').trigger('change');
$("input[name='returnpostage']").change(function() {
    postage_in =  parseFloat($(this).val());   
    calculate();
}).filter(':checked').trigger('change');

演示:小提琴

于 2013-07-11T11:05:24.927 回答
0

在更改功能结束后再次调用您的更改事件以自动调用更改调用....

 $("input[name='outwardpostage']").change(function()
 {
  postage_out=$(this).val();
  tot_price=parseFloat(price,10)+parseFloat(postage_out,10)+parseFloat(postage_in,10)
  tot_price=tot_price.toFixed(2)

  $('.tot_price').text('£'+tot_price); 
}).change();  //<--here ..same for other change event
于 2013-07-11T11:06:55.147 回答
0

演示小提琴

代码-

var price=$("input[name='courierrepairprice']").val();
price = Number(price.replace(/[^0-9\.]+/g,""));
var postage_out=0;
var postage_in=0;
var fndo = function()
{
 postage_in=$(this).val()||postage_in;   
 tot_price=parseFloat(price,10)+parseFloat(postage_out,10)+parseFloat(postage_in,10)
 tot_price=tot_price.toFixed(2)
 $('.tot_price').text('£'+tot_price);
};

$("input[name='outwardpostage'], input[name='returnpostage']").change(fndo);
$(document).ready(fndo);

在这里,我使用了一个函数对象并调用了更改和文档准备就绪,添加了一个条件,postage_in以防止undefined在被文档调用时被文档调用,因为文档将没有价值

于 2013-07-11T11:15:54.920 回答
0

另一种方法是将更改函数中的代码移动到明显的函数中,并在加载时调用它,然后在更改侦听器中调用它。

$(document).load(function(){ 
    var doAction = function(){

    };

    $("input[name='returnpostage']").change(function()
    {
      doAction();
    };

    doAction();
});
于 2013-07-11T11:10:04.157 回答
0

嗨,你也可以试试这个

var price=$("input[name='courierrepairprice']").val();
price = Number(price.replace(/[^0-9\.]+/g,""));
var postage_out=0;
 var postage_in=0
$("input[name='outwardpostage']").change(function()
{
postage_out=$(this).val();
tot_price=parseFloat(price,10)+parseFloat(postage_out,10)+parseFloat(postage_in,10)
tot_price=tot_price.toFixed(2)

$('.tot_price').text('£'+tot_price);
}).change();
$("input[name='returnpostage']").change(function()
{
postage_in=$(this).val();   
tot_price=parseFloat(price,10)+parseFloat(postage_out,10)+parseFloat(postage_in,10)
tot_price=tot_price.toFixed(2)
$('.tot_price').text('£'+tot_price);
}).change();

JS Fiddle Demo演示

于 2013-07-11T11:11:17.467 回答