如何在jQuery中连续触发函数?
我的基本设置是,我有一个表单,它是隐藏的,直到通过单击进行选择,例如“成员、非成员、员工等”。单击选择后,表单显示,其中的账单区域也隐藏,直到表单总额超过$0 现在我的问题是,只要点击了5个选项中的4个,总数就会立即超过0美元。在这种情况下,计费部分应该自动触发,但我无法让我的第二个函数(进行计算的函数)侦听onclick事件或on change事件的第一个函数。是否有一种方法可以在我的每个“if”语句中,以及在代码中输入“execute calculate function”这样的结尾 大概是这样的:如何在jQuery中连续触发函数?,jquery,function,Jquery,Function,我的基本设置是,我有一个表单,它是隐藏的,直到通过单击进行选择,例如“成员、非成员、员工等”。单击选择后,表单显示,其中的账单区域也隐藏,直到表单总额超过$0 现在我的问题是,只要点击了5个选项中的4个,总数就会立即超过0美元。在这种情况下,计费部分应该自动触发,但我无法让我的第二个函数(进行计算的函数)侦听onclick事件或on change事件的第一个函数。是否有一种方法可以在我的每个“if”语句中,以及在代码中输入“execute calculate function”这样的结尾 大概是
if(section == 'Member') {
var base_cost = 150;
$("#commentTable,#ClinicStaff,#IMSNonMember,#Resident,#Student").fadeOut('slow', function() {
// Animation complete.
});
$("#commentTable, #IMSMember").fadeIn('slow', function() {
// Animation complete
});
$("input[name=SectionChosen]").val('Member');// Section selected, pass as hidden field for processing
***$runNextFunction();***
}
我试着做:$(“'input[name^=PROD]”,'base_cost”).change(function(){
查看是否可以让函数监视输入和基本成本字段的更改。但它不想触发。以下是我的完整设置:
jQuery(function(ready){
jQuery('.showForm').click(function(){
var section = $(this).attr('target');
var base_cost = ''; // reset base cost
$("input[name=TOTAL]").val('');// Reset the Total field to 0 to hide the billing form again
$("input[name^=PROD]").val('');// matches those that begin with 'PROD' and clears them
$("input[name=SectionChosen]").val('');// Reset the section choice
if(section == 'Member') {
var base_cost = 150;
$("#commentTable,#ClinicStaff,#IMSNonMember,#Resident,#Student").fadeOut('slow', function() {
// Animation complete.
});
$("#commentTable, #IMSMember").fadeIn('slow', function() {
// Animation complete
});
$("input[name=SectionChosen]").val('Member');// Section selected, pass as hidden field for processing
}
else if(section == 'Clinic') {
var base_cost = 150;
$("#commentTable,#IMSMember,#IMSNonMember,#Resident,#Student").fadeOut('slow', function() {
// Animation complete.
});
$("#commentTable, #ClinicStaff").fadeIn('slow', function() {
// Animation complete
});
$("input[name=SectionChosen]").val('Clinic');// Section selected, pass as hidden field for processing
}
else if(section == 'Nonmember') {
var base_cost = 250;
$("#commentTable,#IMSMember,#ClinicStaff,#Resident,#Student").fadeOut('slow', function() {
// Animation complete.
});
$("#commentTable, #IMSNonMember").fadeIn('slow', function() {
// Animation complete
});
$("input[name=SectionChosen]").val('Nonmember');// Section selected, pass as hidden field for processing
}
else if(section == 'Resident') {
var base_cost = 75;
$("#commentTable, #IMSMember,#ClinicStaff,#IMSNonMember,#Student").fadeOut('slow', function() {
// Animation complete.
});
$("#commentTable, #Resident").fadeIn('slow', function() {
// Animation complete
});
$("input[name=SectionChosen]").val('Resident');// Section selected, pass as hidden field for processing
}
else if(section == 'Student') {
var base_cost = 0;
$("#commentTable,#IMSMember,#ClinicStaff,#IMSNonMember,#Resident").fadeOut('slow', function() {
// Animation complete.
});
$("#commentTable, #Student").fadeIn('slow', function() {
// Animation complete
});
$("input[name=SectionChosen]").val('Student');// Section selected, pass as hidden field for processing
}
// Calculate order Total
$('input[name^=PROD]').change(function() {
// Total cost of order, is equal to base cost + any additional selectoins made below
var order_total = base_cost;
// Run through all the form fields
$('input[name^=PROD]').each(function(i) {
// Get the current field and its name
var form_name = $(this).attr('name');
// If so, extract the price from the name
var item_price = parseFloat(form_name.substring(form_name.lastIndexOf("_") + 1));
// Get the quantity
var item_quantity = parseInt($(this).val(), 10);
// Update the order total
if (item_quantity >= 0) {
order_total += item_quantity * item_price
}
});
// Display the total rounded to two decimal places
$('input[name=TOTAL]').val((Math.round(order_total*100)/100).toFixed(2));
// Show the billing portion if total is not 0
if (order_total > 1) {
// show the section with the billing portion
$("#BillingPortion").show();
}
else {
// hide billing portion if total is 0
$("#BillingPortion").hide();
}
});
});
});
正如您从表单中看到的,如果您单击一个选项,然后通过在来宾中插入一个数字来添加更多的“成本”,然后账单部分显示。但这还不够好,因为如果他们不想要任何来宾,账单部分仍应显示他们的基本成本是否大于0美元
如果有人能给我指出正确的方向那就太好了
另外,对于jQuery,我也没有太多的经验,所以我相信我的代码可能会变得更加枯燥,对你们中的一些人来说可能会很糟糕,但至少这是一个开始。一些事情。通过使用
$('input[name^=PROD]'))。更改单击处理程序中的绑定每次启动单击处理程序时,您都将添加相同的处理程序。这意味着在第二次单击时,当您更改输入时,它将启动两次。这可能不是您想要的
第二,为什么不把计算总数的部分提取出来,作为一个单独的函数,您可以在单击处理程序中调用它呢
function calculateTotal() {
// your code to calculate the total and make part of the UI visible if more than
// $0.
}
然后您还可以让更改处理程序调用它:
$('input[name^=PROD]').change(function() {
calculateTotal();
}
有几件事。通过在click
处理程序中使用$('input[name^=PROD]').change
绑定,每次启动click
处理程序时,您都将添加相同的处理程序。这意味着在第二次单击时,当您更改输入时,它将启动两次。这可能不是您想要的
第二,为什么不把计算总数的部分提取出来,作为一个单独的函数,您可以在单击处理程序中调用它呢
function calculateTotal() {
// your code to calculate the total and make part of the UI visible if more than
// $0.
}
然后您还可以让更改处理程序调用它:
$('input[name^=PROD]').change(function() {
calculateTotal();
}
好吧,我继续对你的代码进行了一些重构
节链接的标记
您使用链接在表单之间切换。但是,链接本身是间接的(通过JavaScript代码)设置一个名为sectionselected
的隐藏输入。您可以更清楚地看到,单击一个链接代表一个选择,该选择也是表单数据的一部分。因此,使用一组单选框来选择一个选项,而不是一组语义不相关的链接。Since收音机框是适当的输入
元素,具有名称
和值
,它们可以替换您原来隐藏的部分选择的
输入。另外,您甚至不需要任何JavaScript来设置值,因为所选收音机框的值将被提交
<label><input type="radio" name="SectionChosen" value="Member" /> I am an IMS Member Physician</label>
<label><input type="radio" name="SectionChosen" value="Clinic" /> I am a Clinic/Hospital Administrators or Clinic Staff</label>
...
然后,可以使用以下方法检索基本成本:
var base_cost = $(...).data('base-cost');
要从当前选定的部分获取基本成本,只需查找当前选定的单选框:
var base_cost = $('input[name=SectionChosen]:checked').data('base-cost');
仅此而已!您不再需要从单击处理程序中绑定change
处理程序,因为您可以在标记本身中找到基本成本。这意味着您只需要在DOM就绪时绑定change
处理程序一次,这是应该的
进一步改进
总有改进的余地。例如,您可以为实际表单节提供与节名匹配的数据节
属性,而不是id
。这样,您可以更轻松地选择需要隐藏的节和需要显示的节。而不是写下相同的id selec列表或者,您可以选择类似于.section[data section=“Member”]
和.section:not([data section=“Member”])的内容
.Heck,数据部分
值甚至可以来自所选的广播框本身,您甚至不需要长的if…否则if
树!好吧,我继续对您的代码进行了一些重构
节链接的标记
您使用链接在表单之间切换。但是,链接本身是间接的(通过JavaScript代码)设置一个名为sectionselected
的隐藏输入。您可以更清楚地看到,单击一个链接代表一个选择,该选择也是表单数据的一部分。因此,使用一组单选框来选择一个选项,而不是一组语义不相关的链接。Since收音机框是适当的输入
元素,具有名称
和值
,它们可以替换您原来隐藏的部分选择的
输入。另外,您甚至不需要任何JavaScript来设置值,因为所选收音机框的值将被提交
<label><input type="radio" name="SectionChosen" value="Member" /> I am an IMS Member Physician</label>
<label><input type="radio" name="SectionChosen" value="Clinic" /> I am a Clinic/Hospital Administrators or Clinic Staff</label>
...
然后,可以使用以下方法检索基本成本:
var base_cost = $(...).data('base-cost');
要从当前选定的部分获取基本成本,只需查找当前选定的单选框:
var base_cost = $('input[name=SectionChosen]:checked').data('base-cost');
仅此而已!您不再需要从单击处理程序中绑定更改处理程序,因为您可以在标记本身中找到基本成本