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