0

編集:返信ありがとうございます!残念ながら、.trigger('change') または .change() を使用して手動でイベントを実行すると、正しく動作しません。ユーザーがラジオ ボタンの 1 つのセットの値を変更しても、他のセットを変更しない場合、計算は加算されません。他の提案はありますか?

私はこのフォームを持っています

ほとんどの場合、希望どおりに機能しますが、ユーザーがラジオボタンの選択を変更したときだけでなく、ページの読み込み時にも 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

もう 1 つのアプローチは、変更関数内のコードを明らかな関数に移動し、それをロード時に呼び出してから、変更リスナーで呼び出すことです。

$(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 デモデモ

于 2013-07-11T11:11:17.467 に答える
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

変更関数の最後に変更イベントを再度呼び出して、変更呼び出しを自動呼び出します....

 $("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 に答える