简体   繁体   English

通过单选按钮更改字段集

[英]Change fieldset via radio button

I have a form with 2 radio buttons and when either button is toggled it shows or hides a certain fieldset. 我有一个带有2个单选按钮的表单,当切换任何一个按钮时,它都会显示或隐藏某个字段集。 The issue I have is because the fieldset is just hidden so when the form is submitted it still takes the first fieldsets values. 我遇到的问题是因为该字段集只是隐藏的,所以在提交表单时,它仍会采用第一个字段集值。

I have setup a fiddle to show how the form changes the fieldsets http://jsfiddle.net/hhdMq/1/ 我设置了一个小提琴,以显示表单如何更改字段集http://jsfiddle.net/hhdMq/1/

So when I select "Scale B" although you can change the correct values, when the form is submitted it takes the default values of Scale A. 因此,尽管您可以更改正确的值,但当我选择“比例B”时,提交表单时它将采用比例A的默认值。

<center>
<input type="radio" name="sellorlet" value="Yes" id="rdYes" checked="yes" />
<label for="rdYes">Scale A</label>
<input type="radio" name="sellorlet" value="No" id="rdNo" />
<label for="rdNo">Scale B</label>
</center>
<fieldset id="sell">
<center>
    <select id="pricemin" name="min">
        <option value="50000">Min Price</option>
        <option value="50000">£50,000</option>
        <option value="100000">£100,000</option>
        <option value="200000">£200,000</option>
        <option value="300000">£300,000</option>
        <option value="400000">£400,000</option>
        <option value="500000">£500,000</option>
        <option value="600000">£600,000</option>
        <option value="700000">£700,000</option>
        <option value="800000">£800,000</option>
        <option value="900000">£900,000</option>
        <option value="1000000">£1,000,000</option>
        <option value="1250000">£1,250,000</option>
        <option value="1500000">£1,500,000</option>
        <option value="1750000">£1,750,000</option>
        <option value="2000000">£2,000,000</option>
        <option value="3000000">£3,000,000</option>
    </select>
    <select id="pricemax" name="max">
        <option value="5000000">Max Price</option>
        <option value="100000">£100,000</option>
        <option value="200000">£200,000</option>
        <option value="300000">£300,000</option>
        <option value="400000">£400,000</option>
        <option value="500000">£500,000</option>
        <option value="600000">£600,000</option>
        <option value="700000">£700,000</option>
        <option value="800000">£800,000</option>
        <option value="900000">£900,000</option>
        <option value="1000000">£1,000,000</option>
        <option value="1250000">£1,250,000</option>
        <option value="1500000">£1,500,000</option>
        <option value="1750000">£1,750,000</option>
        <option value="2000000">£2,000,000</option>
        <option value="3000000">£3,000,000</option>
        <option value="4000000">£4,000,000</option>
        <option value="5000000">£5,000,000</option>
    </select>
</center>
</fieldset>
<fieldset id="buy" style="display:none;">
<center>
    <select id="lpricemin" name="min">
        <option value="500">Min Price</option>
        <option value="500">£500</option>
        <option value="600">£600</option>
        <option value="700">£700</option>
        <option value="800">£800</option>
        <option value="900">£900</option>
        <option value="1000">£1000</option>
        <option value="1150">£1150</option>
        <option value="1250">£1250</option>
        <option value="1500">£1500</option>
        <option value="2000">£2000</option>
        <option value="2500">£2500</option>
        <option value="3000">£3000</option>
        <option value="4000">£4000</option>
        <option value="5000">£5000</option>
    </select>
    <select id="lpricemax" name="max">
        <option value="5000">Max Price</option>
        <option value="600">£600</option>
        <option value="700">£700</option>
        <option value="800">£800</option>
        <option value="900">£900</option>
        <option value="1000">£1000</option>
        <option value="1150">£1150</option>
        <option value="1250">£1250</option>
        <option value="1500">£1500</option>
        <option value="2000">£2000</option>
        <option value="2500">£2500</option>
        <option value="3000">£3000</option>
        <option value="4000">£4000</option>
        <option value="5000">£5000</option>
    </select>
</center>
</fieldset>

and the jquery used: 和使用的jQuery:

$("input[name='sellorlet']").change(function () {
$("#sell").toggle(this.value == "Yes");
$("#let").toggle(this.value == "No");

});

My question is, how can I completely disable the first fieldset if Scale B is selected and likewise when Scale A is selected it will disable the second fieldset? 我的问题是,如果选择了标度B,如何完全禁用第一个字段集;同样,当选择标度A时,它将禁用第二个字段集吗?

Many thanks 非常感谢

When submitting a form, you cannot have two inputs, selects, or textareas with the same name in the same form. 提交表单时,在同一表单中不能有两个具有相同名称的输入,选择或文本区域。 Doing so will cause confusion and probably end up the wrong info being submitted. 这样做会引起混乱,并可能最终导致提交错误的信息。 There are two ways you can fix this. 有两种方法可以解决此问题。

Method 1: 方法1:

Change the 改变

<select id="lpricemin" name="min">

<select id="lpricemin" name="lmin">

to

<select id="lpricemax" name="max">

<select id="lpricemax" name="lmax"> respectively. <select id="lpricemax" name="lmax">

This will allow you to handle the data from lmin and lmax and ensure you get the info from the second fieldset. 这将允许您处理lmin和lmax中的数据,并确保从第二个字段集中获取信息。

Method 2: 方法2:

Put the second fieldset in a different form. 将第二个字段集以其他形式输入。 Then just change the jQuery to show the forms instead of the fieldsets. 然后只需更改jQuery以显示表单而不是字段集即可。

Changed the radio buttons now to a tabbed design so the form can be separated correctly. 现在将单选按钮更改为选项卡式设计,以便可以正确分隔表单。 If anyone would like to know how the tabs are done they are here http://cssdeck.com/labs/fancy-tabbed-navigation-with-css3-and-jquery 如果有人想知道这些标签的制作方法,请访问http://cssdeck.com/labs/fancy-tabbed-navigation-with-css3-and-jquery

Method 3 would be to change the switch the content of your select through Javascript rather than toggling through visibility. 方法3是通过Javascript而不是通过可见性来更改选择内容的开关。 You can do that through: 您可以通过以下方式实现:

function setMaxScale()
{
document.getElementById().innerHTML = "<option value="50000">Min Price</option>\
    <option value="50000">£50,000</option>\
    <option value="100000">£100,000</option>\
    <option value="200000">£200,000</option>\
    <option value="300000">£300,000</option>...";
}

An other clean solution would be to create your scales dynamically with a loop. 另一种干净的解决方案是使用循环动态创建秤。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM