Javascript 为什么两个jquery函数之间存在confilct

Javascript 为什么两个jquery函数之间存在confilct,javascript,jquery,Javascript,Jquery,我有一个表单,有两个单选选项和一个提交按钮。根据按下submit按钮时选择的单选按钮,我希望调用不同的计算函数 <input type="radio" name="frm" id="airradio1" onclick="setairform1()">&nbsp; Enter individual flights(more accurate) <br> <input type="radio" name="frm" id="airradio

我有一个表单,有两个单选选项和一个提交按钮。根据按下submit按钮时选择的单选按钮,我希望调用不同的计算函数

     <input type="radio" name="frm" id="airradio1"  onclick="setairform1()">&nbsp; Enter individual flights(more accurate) <br>
    <input type="radio" name="frm" id="airradio2" onclick="setairform2()">&nbsp; Enter numbers of flight(faster)<br>

    <div><button type="button" id="aircalc" >calculate</button></div>
我的计算功能运行良好。但是,当我选择第二个单选按钮,然后单击calc按钮时,它将显示我使用第一种方法进行的上一次计算的结果

这是我的Javascript/jQuery,我做错了什么

        $("#airradio2").click(function(){
                $("#aircalc").click(myairFunction2);


            });


        $("#airradio1").click(function(){
            $("#aircalc").click(function(){
                $("#airanswer").val("");
                var dept = $("#dept").val();
                var dest = $("#dest").val();
                $.post('airtravel.php',{dept: dept, dest: dest}, function(data){
                    var response = jQuery.parseJSON(data);
                    var a =response.co2;
                    var mile = (response.miles).toFixed(4);
                    var numpass = $("#numpass").val();
                    var flightclass = $("#flightclass").val();
                    var trip = $("input[name='trip']:checked").val();
                    var total = (a * trip * flightclass * numpass).toFixed(4);

                    var sum = "<div>Trip from " + dept + " to " + dest + ", you traveled " + mile + "miles</div>";
                    $("#airanswer").text(total);
                    $("#results").append(sum);

                });


            });

        });
您正在绑定两个。单击事件到$'aircalc'。为了防止双重绑定,请考虑绑定,以便每次使用./p>时都可以删除以前的处理程序。 另一种更好的方法是确定选择了哪个单选按钮,并调用@GriffeyDog指出的相应函数:

// Save off objects to prevent DOM re-traversal
var $dept = $('#dept'),
    $dest = $('#dest');

$('#aircalc').on('click', function () {
    if($('#airradio1').is(':checked')) {
        $("#airanswer").val("");
        $.post('airtravel.php',{dept: $dept.val(), dest: $dest.val()}, function(data) {
            var response = jQuery.parseJSON(data);
            var a =response.co2;
            var mile = (response.miles).toFixed(4);
            var numpass = $("#numpass").val();
            var flightclass = $("#flightclass").val();
            var trip = $("input[name='trip']:checked").val();
            var total = (a * trip * flightclass * numpass).toFixed(4);
            var sum = "<div>Trip from " + dept + " to " 
            + dest + ", you traveled " + mile + "miles</div>";
            $("#airanswer").text(total);
            $("#results").append(sum);
        });
    } else {
        myairFunction2();
    }
});

您正在绑定两个。单击事件到$'aircalc'…每次单击一个收音机时,OP都会绑定一个新的单击函数。@GriffeyDog。不过OP并没有删除以前的事件处理程序,所以所有事件处理程序都将启动。或者只需在aircalc上单击一次处理程序,即可检查选择了两个无线电中的哪一个。@GriffeyDog是的。我也在编辑那篇文章。我引用了你的共同点,并将其添加到我的答案中。回答得好,+1。
// Save off objects to prevent DOM re-traversal
var $dept = $('#dept'),
    $dest = $('#dest');

$('#aircalc').on('click', function () {
    if($('#airradio1').is(':checked')) {
        $("#airanswer").val("");
        $.post('airtravel.php',{dept: $dept.val(), dest: $dest.val()}, function(data) {
            var response = jQuery.parseJSON(data);
            var a =response.co2;
            var mile = (response.miles).toFixed(4);
            var numpass = $("#numpass").val();
            var flightclass = $("#flightclass").val();
            var trip = $("input[name='trip']:checked").val();
            var total = (a * trip * flightclass * numpass).toFixed(4);
            var sum = "<div>Trip from " + dept + " to " 
            + dest + ", you traveled " + mile + "miles</div>";
            $("#airanswer").text(total);
            $("#results").append(sum);
        });
    } else {
        myairFunction2();
    }
});