首页 > 解决方案 > JS & Function 重叠,函数调用错误

问题描述

我有一个代码和 JS 2 个不同的函数,但是当我尝试更改序列或添加函数调用时它以 1 方式工作......它因某种原因而倍增

做了几天,无法弄清楚重叠在哪里

这是现场直播 https://ananastours.com/tour/7-days-hurghada-albatros-palace/

人数变化时的第一个功能,它重新计算新价格

    $(document).on('change', '.tourmaster-tour-booking-people-container select, .tourmaster-tour-booking-room-input select', function(){
    $('.loader-image-block').show();
    setTimeout(function(){
        var newpric = $('.tourmaster-single-header .tourmaster-tour-discount-price').text();
        if(newpric == ''){
            loadnewprice();
        }else{
            $('.loader-image-block').hide();
        }
    }, 3000);
});

function loadnewprice(){
    var formdata = $("form#tourmaster-single-tour-booking-fields").serialize();
    var frmout = $('#loc-from-out').val(); 
    var toout = $('#loc-to-out').val();
    var post_id = $('#post_id').val();
    var tourdate = $('.tourmaster-datepicker-alt').val();
    var baseurl = window.location.origin;
    jQuery.ajax({
        url: baseurl+"/wp-admin/admin-ajax.php",
        data: {
            action: 'slct_flit_pric',
            frmout: frmout,
            toout: toout,
            post_id: post_id,
            tourdate: tourdate,
            formdata: formdata,
        },
        type: 'GET',
        success: function(data){
            if(data){
                if(data.indexOf('-') != -1){
                    var avlseat = data.split('-');
                    alert('avilable sits is '+avlseat[1]+', please change tour date or members.');
                    $('.tourmaster-tour-booking-people-container select').val('');
                    $('.tourmaster-tour-booking-submit-input .tourmaster-button').attr("disabled", true);
                    $('.loader-image-block').hide();

                }else{
                    var oldpric = $('.tourmaster-single-header .tourmaster-tour-price .tourmaster-tail').text();
                    if(oldpric == ''){
                    var oldpric = $('.tourmaster-template-wrapper .tourmaster-tour-price .tourmaster-tail').text();
                    }
                    $('.tourmaster-tour-booking-submit-input .tourmaster-button').attr("disabled", false);
                    var crncy = $('#ccurncy').val();
                    var oldpris = oldpric.replace(crncy,'');
                    var oldprise = oldpris.replace(',','');
                    var newpric = parseInt(data) + parseInt(oldprise);
                    var changedpric = crncy+newpric+".00";
                    $(".tourmaster-tour-price .tourmaster-tail").text(changedpric);
                    $('.loader-image-block').hide();
                }
            }
        }
    });
}

第二,当更改日历中的日期选择器时,它会更改表单数据并应根据新日期更改价格,但它会返回到预先计算 Firs 功能工作正常......但在更改人员之后,你去更改它没有的日期'不工作

    $(document).on('click', '.cursordate', function () {
    $('.cursordate').removeClass('selectdat');
    $(this).addClass('selectdat');
    var slctdat = $(this).text();
    var slctdat = slctdat.replace(/\s/g, '');
    var reultt  = slctdat.split('$');
    var slctdatval = $(this).attr('data');
    var slctcdatval = $(this).attr('cdata');
    var frmout = $('#loc-from-out').val(); 
    var toout = $('#loc-to-out').val();
    var post_id = $('#post_id').val();
    $('.loader-image-block').show();
    var outnnam = $('#outnnam').val();
    var innnam = $('#innnam').val();

    var baseurl = window.location.origin;

    jQuery.ajax({
        url: baseurl+"/wp-admin/admin-ajax.php",
        data: {
            action: 'chang_flit_date',
            frmout: frmout,
            toout: toout,
            dtout: slctdatval,
            post_id: post_id,
            outnnam: outnnam,
            innnam: innnam,
        },
        type: 'GET',
        dataType: 'json',
        success: function(data){ 
            if(data){
                $('.sideoffer').html(data.sideoffer);
                $('.tourmaster-datepicker-alt').val(slctdatval);
                $('.hasDatepicker').val(slctcdatval);
                //$('.tourmaster-datepicker-alt').change();
                $('.shodat').text(reultt[0]);
        //      $(".tourmaster-tail").text(data.privpric);
        //      $(".tourmaster-tour-discount-price").text(data.tourpric);
                $('.loader-image-block').hide();
            }else{

            }
        }
    });
});

JS代码

                function my_ajax_savflit_function() {
                    global $wpdb;
                    $table_name = $wpdb->prefix . 'cws_flight_route';
                    $location = $_GET['frmout'];
                    $destination = $_GET['toout'];
                    $outbound = 'outbound';
                    $inbound = 'inbound';
                    $date = $_GET['dtout'];
                    $post_id = $_GET['post_id'];
                    $outnnam = $_GET['outnnam'];
                    $innnam = $_GET['innnam'];
                    $tour_pric = get_post_meta($post_id, 'tourmaster-tour-price', true);
                    $meta = get_post_meta( $post_id, 'tourmaster-tour-duration', true );
                    $nnmeta = $meta;

                    $indat = date('Y-m-d', strtotime($date. ' + '.$nnmeta.' days')); 

                    $outbnd_rslt = $wpdb->get_results("SELECT * FROM $table_name WHERE (location = '$location' AND destination = '$destination' AND type = '$outbound' AND date = '$date')");

                    $inbnd_rslt = $wpdb->get_results("SELECT * FROM $table_name WHERE (location = '$destination' AND destination = '$location' AND type = '$inbound' AND date = '$indat')");
                $result = array();
                $sideoffer = '';
                $outbnd = array();
                $inbnd = array();
                $mmin = $outbnd_rslt[0]->adult_price+$inbnd_rslt[0]->adult_price;
                $mim_percent = $mmin+(($mmin)*20)/100;

                $durasn = $outbnd_rslt[0]->duration;
                $duration = explode(".",$durasn);
                if(sizeof($duration) > 1){
                    $tiime = 60*60*$duration[0] + 60*$duration[1];
                }else{
                    $tiime = 60*60*$duration[0];
                }
                $timestamp = strtotime($outbnd_rslt[0]->timing) + $tiime;
                $cheap_out_time = date('H:i a', $timestamp);

                $duras = $inbnd_rslt[0]->duration;
                $duratio = explode(".",$duras);
                if(sizeof($duratio) > 1){
                    $tiim = 60*60*$duratio[0] + 60*$duratio[1];
                }else{
                    $tiim = 60*60*$duratio[0];
                }
                $timestam = strtotime($inbnd_rslt[0]->timing) + $tiim;
                $cheap_in_time = date('H:i a', $timestam);$currency = get_option('cws-flights-currency');if(isset($currency) && $currency != ''){   $currency = $currency;}else{    $currency = '€';}
                $sideoffer .= '<div class="postfrom">
                                        <div class="ttyp">'.$outbnd_rslt[0]->type.'</div>
                                        <div class="arline">'.$outbnd_rslt[0]->airlines.'</div>
                                        <div class="ddat">'.date("D d M Y", strtotime($outbnd_rslt[0]->date)).'</div>
                                        <div class="timme">'.$outbnd_rslt[0]->timing.' '.$outnnam.' / '.$cheap_out_time.' '.$innnam.'</div>
                                    </div>';
                $sideoffer .= '<div class="postto">
                                        <div class="ttyp">'.$inbnd_rslt[0]->type.'</div>
                                        <div class="arline">'.$inbnd_rslt[0]->airlines.'</div>
                                        <div class="ddat">'.date("D d M Y", strtotime($inbnd_rslt[0]->date)).'</div>
                                        <div class="timme">'.$inbnd_rslt[0]->timing.' '.$innnam.' / '.$cheap_in_time.' '.$outnnam.'</div>
                                    </div>';
                $sideoffer .= '<div class="postprispp">
                                        <div class="prishad">Flight Price</div>
                                        <div class="prispp">'.$currency.' '.$mmin.' pp</div>
                                    </div>';
                $sideoffer .= '<div class="postpris">
                                        <div class="txinfo">* Price Include Taxes</div>
                                        <div class="prishad">Was</div>
                                        <div class="prispp">'.$currency.' '.$mim_percent.' pp</div>
                                        <div class="prisofrhad">Price per person</div>
                                        <div class="prisofrpp">'.$currency.' '.$mmin.'</div>
                                    </div>';
                    $tourpric = $tour_pric + $mmin; 
                    $result['tourpric'] = $currency.' '.$tourpric;
                    $privpric = $tour_pric + $mim_percent;  
                    $result['privpric'] = $currency.' '.$privpric;
                    $result['sideoffer'] = $sideoffer;

                    echo $json = json_encode($result); 
                    die;
                }

                add_action( 'wp_ajax_chang_flit_date', 'my_ajax_savflit_function' );    
                add_action( 'wp_ajax_nopriv_chang_flit_date', 'my_ajax_savflit_function' );





                function my_ajax_slct_flit_pric() {
                    global $wpdb;
                    $table_name = $wpdb->prefix . 'cws_flight_route';
                    $location = $_GET['frmout'];
                    $destination = $_GET['toout'];
                    $post_id  = $_GET['post_id'];
                    $date  = $_GET['tourdate'];
                    $formdata = explode("&",$_GET['formdata']);
                    $realdata = array();
                    $adult = 0;
                    $children = 0;
                    $infant = 0;
                    foreach($formdata as $frmdata){
                        if (strpos($frmdata, 'adult') !== false) {
                            $fordat = explode("=",$frmdata);
                            $adult = $adult+$fordat[1];
                        }else if(strpos($frmdata, 'children') !== false) {
                            $fordat2 = explode("=",$frmdata);
                            $children = $children+$fordat2[1];
                        }else if(strpos($frmdata, 'infant') !== false) {
                            $fordat3 = explode("=",$frmdata);
                            $infant = $infant+$fordat3[1];
                        }else{}
                    }

                    $totalmembr = $adult + $children;
                    $_SESSION['totalmembr'] = $totalmembr;

                    $nnmeta = get_post_meta( $post_id, 'tourmaster-tour-duration', true );
                    $indat = date('Y-m-d', strtotime($date. ' + '.$nnmeta.' days')); 

                    $outbnd_rslt = $wpdb->get_results("SELECT * FROM $table_name WHERE (location = '$location' AND destination = '$destination' AND type = 'outbound' AND date = '$date')");

                    $inbnd_rslt = $wpdb->get_results("SELECT * FROM $table_name WHERE (location = '$destination' AND destination = '$location' AND type = 'inbound' AND date = '$indat')");

                    if($totalmembr <= $outbnd_rslt[0]->seats && $totalmembr <= $inbnd_rslt[0]->seats){

                        if($adult > 0){
                            $adultout = $adult * $outbnd_rslt[0]->adult_price;
                            $adultin = $adult * $inbnd_rslt[0]->adult_price;
                        }else{
                            $adultout = 0;
                            $adultin = 0;
                        }
                        if($children > 0){
                            $childrenout = $children * $outbnd_rslt[0]->child_price;
                            $childrenin = $children * $inbnd_rslt[0]->child_price;
                        }else{
                            $childrenout = 0;
                            $childrenin = 0;
                        }
                        if($infant > 0){
                            $infantout = $infant * $outbnd_rslt[0]->infant_price;
                            $infantin = $infant * $inbnd_rslt[0]->infant_price;
                        }else{
                            $infantout = 0;
                            $infantin = 0;
                        }
                        $total = $adultout + $adultin + $childrenout + $childrenin + $infantout + $infantin;

                        echo $total;
                        die();
                    }else{
                        if($outbnd_rslt[0]->seats >= $inbnd_rslt[0]->seats){
                            echo 'seat-'.$inbnd_rslt[0]->seats;
                        }else{
                            echo 'seat-'.$outbnd_rslt[0]->seats;
                        }

                        die();
                    }
                }

                add_action( 'wp_ajax_slct_flit_pric', 'my_ajax_slct_flit_pric' );    
                add_action( 'wp_ajax_nopriv_slct_flit_pric', 'my_ajax_slct_flit_pric' );

标签: javascriptphpjquery

解决方案


推荐阅读