【问题标题】:Use Query to Dynamically add/remove input fields depending on radio button使用查询根据单选按钮动态添加/删除输入字段
【发布时间】:2014-10-20 10:59:25
【问题描述】:

我从 CodeCanyon 下载了一个表单,我可以按照我的想法很好地编辑该表单,但我需要做出一些超出我能力范围的更改,我们将不胜感激任何帮助或指导。

我需要设置表单,以便当用户从单选按钮中选择“是”时,会弹出经过验证的输入,然后在选择“否”时删除输入。

然后在验证时,必须选择所有单选按钮问题。

所以表格看起来像:


标签 -> 问题 1

收音机 -> 是 // {否}


标签 -> 问题 2

收音机 -> {是} // 否

输入 -> 3400


标签 -> 问题 3

收音机 -> {是} // 否

输入 -> 550



然后表单的电子邮件将发送以下内容:

问题 1:否

问题 2:3400

问题 3:550

<form method="post" class="DA_custom_form" id="registration-form" action="email.php">
    <h3>Dynamic Radio Section</h3>

    <div class="DA_inner_frame">

        <div class="DA_holder">
            <label>Radio Question 1</label>

            <div class="DA_holder DA_radio_holder">
            <div class="cl">&nbsp;</div>
                <input type="radio" class="radio-btn" name="question1" id="question1" value="yes" /><label class="fl">Yes</label>
                <div class="cl">&nbsp;</div>
                <input type="radio" class="radio-btn" name="question1" id="question1" value="no"  /><label class="fl">No</label>
                <div class="cl">&nbsp;</div>
            </div>
            <div class="cl">&nbsp;</div>

        </div>

        <!--Show on Yes --><div class="DA_holder">
            <label>Text field for question 1: Yes</label>
            <div class="DA_field_container" >
                <div class="cl" >&nbsp;</div>
                <input type="text" class="field" id="question1" name="question1" placeholder='Range Validation 2000-4000'/>
                <span><i class="icon-remove"></i></span>
                <div class="cl">&nbsp;</div>
            </div>  
        </div>

        <div class="DA_holder">
            <label>Radio Question 2</label>

            <div class="DA_holder DA_radio_holder">
            <div class="cl">&nbsp;</div>
                <input type="radio" class="radio-btn" name="question2" id="question2" value="yes" /><label class="fl">Yes</label>
                <div class="cl">&nbsp;</div>
                <input type="radio" class="radio-btn" name="questio2" id="question2" value="no"  /><label class="fl">No</label>
                <div class="cl">&nbsp;</div>
            </div>
            <div class="cl">&nbsp;</div>

        </div>

        <!--Show on Yes --><div class="DA_holder">
            <label>Text field for question 2: Yes</label>
            <div class="DA_field_container" >
                <div class="cl" >&nbsp;</div>
                <input type="text" class="field" id="question2" name="question2" placeholder='Range Validation 500-1000'/>
                <span><i class="icon-remove"></i></span>
                <div class="cl">&nbsp;</div>
            </div>  
        </div>

        <div class="DA_holder">
            <label>Radio Question 3</label>

            <div class="DA_holder DA_radio_holder">
            <div class="cl">&nbsp;</div>
                <input type="radio" class="radio-btn" name="question3" id="question3" value="yes" /><label class="fl">Yes</label>
                <div class="cl">&nbsp;</div>
                <input type="radio" class="radio-btn" name="questio3" id="question3" value="no"  /><label class="fl">No</label>
                <div class="cl">&nbsp;</div>
            </div>
            <div class="cl">&nbsp;</div>

        </div>

        <!--Show on Yes --><div class="DA_holder">
            <label>Text field for question 3: Yes</label>
            <div class="DA_field_container" >
                <div class="cl" >&nbsp;</div>
                <input type="text" class="field" id="question3" name="question3" placeholder='Range Validation 500-1000'/>
                <span><i class="icon-remove"></i></span>
                <div class="cl">&nbsp;</div>
            </div>  
        </div>

</form>

【问题讨论】:

  • 请向我们展示您的表单的 HTML(包括动态部分),以便我们更具体地建议如何执行您的要求。一般的答案是您使用 jQuery 中的 .change() 事件来响应单选更改,然后根据更改时的值显示/隐藏表单的部分。
  • 我正在尝试用我所在的位置创建一个小提琴页面,但老实说,我正处于零基础上。随着我的前进,我将继续更新页面。自学很有趣,但有时很长......提前谢谢
  • 我所要求的只是你为你的字段开始的 HTML。我们无法提供在不查看您的 HTML 的情况下对您的 HTML 进行操作的 jQuery 代码。你还没有 HTML 吗?
  • 我有一个静态 html 基础,我正在使用我从模板构建的基础,但仅此而已。这是我拥有的 HTML。 jsfiddle.net/eyeyb6zm
  • 请按照 StackOverflow 指南将 HTML(或 HTML 的代表性示例)复制到您的问题中(您可以使用编辑链接来编辑您的问题)。不允许对理解和回答问题至关重要的外部参考,因为它们会随着时间的推移而消失,然后问题就不再完整。

标签: javascript jquery forms validation dynamic


【解决方案1】:

您可以使用此 jQuery 在问题后切换输入​​字段:

$(".DA_radio_holder .radio-btn").change(function() {
    // get appropriate level parent and toggle the next one at that level
    // based on the value of the radio
    $(this).closest(".DA_radio_holder").parent().next()
       .toggle(this.value === 'yes');
});

如果您为问题的父 div 和文本字段的父 div 赋予各自的唯一类,您可以使代码更简单、更易于维护。然后,您还可以通过 CSS 为文本字段的可见性设置默认值。

例如,将"question" 类添加到问题父级,将"textField" 类添加到文本字段父级,如下所示:

        <div class="DA_holder question">
            <label>Radio Question 1</label>

            <div class="DA_holder DA_radio_holder">
            <div class="cl">&nbsp;</div>
                <input type="radio" class="radio-btn" name="question1" id="question1" value="yes" /><label class="fl">Yes</label>
                <div class="cl">&nbsp;</div>
                <input type="radio" class="radio-btn" name="question1" id="question1" value="no"  /><label class="fl">No</label>
                <div class="cl">&nbsp;</div>
            </div>
            <div class="cl">&nbsp;</div>

        </div>

        <!--Show on Yes --><div class="DA_holder textField">
            <label>Text field for question 1: Yes</label>
            <div class="DA_field_container" >
                <div class="cl" >&nbsp;</div>
                <input type="text" class="field" id="question1" name="question1" placeholder='Range Validation 2000-4000'/>
                <span><i class="icon-remove"></i></span>
                <div class="cl">&nbsp;</div>
            </div>  
        </div>

那么,代码就变成了这样:

$(document).ready(function() {
    $(".DA_radio_holder .radio-btn").change(function() {
        // get appropriate level parent and toggle the next one at that level
        // based on the value of the radio
        $(this).closest(".question").next().toggle(this.value === 'yes');
    });
});

而且,您可以从使用此 CSS 隐藏的所有文本字段开始:

.DA_holder.textField {display: none;}

第二个选项的工作演示:http://jsfiddle.net/jfriend00/vjbb4t9p/

【讨论】:

  • 谢谢!这正是我想要做的。虽然你能解释一下我是如何为“question”和“textField”创建父类的吗?
  • @wenzday - 这些类在我的答案中的 HTML 和我链接到的 jsFiddle 中。在那里找他们。
  • 我在小提琴示例中看到了添加内容,但不知道是否可以在我的 CSS 文件中添加除 textField 隐藏之外的任何其他内容。然后我不知道页面是否必须在服务器上才能运行 jquery,所以我将它上传到网络,但它仍然没有“显示”是。我将 javescript 文本放在 的html页面顶部的小提琴中
  • @wenzday - 如果您的页面布局正确并且您在页面中包含了 jQuery,那么一切正常。如果没有看到实际页面,我真的无法帮助你完成什么,所以我可以看到你有什么。
  • @wenzday - 您有一些 CSS 将单选按钮设置为零高度,因此它们不会收到事件。取而代之的是某种icon-circle CSS 来绘制实际的单选按钮。这就是剥夺您输入事件的原因。您知道为什么要使用这种自定义单选按钮行为吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多