Javascript 附加和分离动态创建的输入
我有两个单选按钮:Javascript 附加和分离动态创建的输入,javascript,jquery,html,Javascript,Jquery,Html,我有两个单选按钮: 固定价格选项(默认选中) 可变价格选项(默认禁用) 我还有两种类型的输入: 固定价格\u输入(默认可见。仅出现一次。) 变量\u价格\u输入(不在代码中,因为它必须动态添加。一个或多个发生。) 如果选择了fixed_price_选项,则名为fixed_price_input的输入应该是可见的,并在以后运行时包含。serialize() 如果选择了固定价格\u选项,则以后运行时不应显示或包含变量价格\u输入。serialize() 只有当两个日期输入之间的差异超过12个
(默认选中)固定价格选项
(默认禁用)可变价格选项
(默认可见。仅出现一次。)固定价格\u输入
(不在代码中,因为它必须动态添加。一个或多个发生。)变量\u价格\u输入
fixed_price_选项
,则名为fixed_price_input
的输入应该是可见的,并在以后运行时包含。serialize()
如果选择了固定价格\u选项
,则以后运行时不应显示或包含变量价格\u输入。serialize()
只有当两个日期输入之间的差异超过12个月时,才可选择变量价格选项。(我已经解决了这个问题)
当选择了可变价格选项
时,应该有一个可变价格输入
',因为两个日期输入之间有整整一年(即持续时间月+1)。它们还需要在以后运行.serialize()时包含在内,因此它们需要具有诸如price\u year\u 1
、price\u year\u 2
、price\u year\u 3
等名称,具体取决于两个日期输入之间的年份数
如果选择了可变价格选项
,固定价格输入
在以后运行时不应可见或包含。serialize()
我已经提供了我来过的代码。缺少的逻辑需要放在js代码底部的事件处理程序中
对如何解决这个问题有什么建议吗
--更新--
我的问题需要澄清:
我正在努力的是根据选中的单选按钮切换两种输入类型(固定价格输入
和可变价格输入
)的存在。隐藏/显示它们是不够的,因为我稍后将使用.serialize()。我应该使用.detach()和.append()吗
我还在为如何创建一个比开始日期和结束日期之间的年份还要多的变量\u price\u input
而苦苦挣扎。我应该使用
或.clone()吗
$(文档).ready(函数(){
$(“#inputStartDate,#inputEndDate”).change(函数(){
if($('inputStartDate').val()&&&('inputEndDate').val()){
var startDate=力矩($('#inputStartDate').val();
var endDate=力矩($('#inputeneddate').val();
var durationMonths=endDate.diff(起始日期,“月”);
$(“#durationMonths”).text(durationMonths);
var durationYears=endDate.diff(起始日期,“年”);
$(#durationYears')。文本(durationYears);
如果(持续时间>12){
$('#variablePriceOption').prop(“禁用”,false);
}否则{
$('#variablePriceOption').prop(“禁用”,true);
}
}
});
$('#variablePriceOption,#fixedPriceOption')。更改(函数(){
如果(this.value=='fixedPrice'){
//需要逻辑
}else if(this.value=='variablePrice'){
//需要逻辑
}
});
});代码>
开始日期
结束日期
所选日期之间的月份=。所选日期之间的年份=。
价格模型
固定价格
可变价格
固定价格金额
$
这将有助于您了解日历日期每一年差异的可变定价输入。代码可以分解为其他函数,用于处理元素的显示/隐藏等。您需要将
代码移到其他JS引用之上,以消除在引导过程中看到的错误
另外,您的duration
变量应该是durationMonths
,用于比较>12,因为duration
是未定义的durationYears
应移到日历日期的change
功能之外,以便您可以在其他处理功能中引用它。我在日期计算中添加了Math.abs()
使用隐藏的输入
上的禁用
属性将允许您序列化可见的表单
数据,并确保不会将隐藏的输入(可变定价字段等)作为序列化
数据的一部分
正如@Twisty在您的帖子评论中提到的,如果您在固定/可变选项之间来回切换(localStorage
,sessionStorage
也包括用于存储数据的选项),您将希望使用.detach()
或某种方式来存储可变定价输入值,如果要维护变量/固定输入中的任何值
。如果要存储输入的数据值,还需要删除我的示例中输入字段的.empty()
用法
用于确定应显示多少可变定价输入的循环函数handleVariablePricing
需要连接到存储数据功能中,以确保您使用以前输入的值创建相同数量的字段,而不是在现有字段/值的基础上添加额外的新字段
$(文档).ready(函数(){
var durationYears=0;
$(“#inputStartDate,#inputEndDate”).change(函数(){
if($('inputStartDate').val()&&&('inputEndDate').val()){
var startDate=力矩($)(“#inputStartDate”