【问题标题】:Creating new input fields via dropdown, how to limit new inputs to just 1 each?通过下拉菜单创建新的输入字段,如何将新输入限制为每个只有 1 个?
【发布时间】:2013-07-29 15:02:47
【问题描述】:

所以我有一个选择下拉菜单,它创建了 2 个新的输入字段。

我的 jsFiddle: http://jsfiddle.net/leongaban/CbcmS/

我遇到的问题是,在您创建一个新的输入字段后,您可以一遍又一遍地创建相同的输入字段。只需在the dropdown 中一遍又一遍地选择每个选项。

这不是故意的,我希望发生的情况是,一旦创建了输入,就不能再创建了。

我目前唯一的想法是创建另一个变量,它将手机或工作电话存储到一个数组中,或者只是一个真假布尔值,并在 if else 语句中检查它。

但是,您是否知道一种更简单或更直接的方法来完成此操作?


jQuery:

$(document).ready(function() {

var cellphone = "<th><label>Cell Phone:</label></th><td><input type='tel' name='cp' value=' ' maxlength='11' /></td>";
var workphone = "<th><label>Work Phone:</label></th><td><input type='tel' name='wp' value=' ' maxlength='11' /></td>";

$('#id_contact_info').change(function(){

        if ($(this).val() == 2) {
            console.log('cell phone');
            $('.choice_cell_phone').append(cellphone);

        } else if ($(this).val() == 3) {
           console.log('work phone');
           $('.choice_work_phone').append(workphone);
        }

    });

});


HTML

<div class="form-fields">
<table>
    <tr>
        <th><label for="id_contact_info">Add More Contact Info: </label></th>
        <td>
            <select name="contact_info" id="id_contact_info">
                <option value="1">select contact type</option>
                <option value="2">Cell Phone</option>
                <option value="3">Work Phone</option>
            </select>
        </td>
    </tr>

    <tr class="choice_cell_phone">

    </tr>

    <tr class="choice_work_phone">

    </tr>

</table>

【问题讨论】:

  • 创建后,只需在选择中禁用该选项!
  • 哦,就像某种从选择功能中删除?
  • 我认为一个很好的方法是使用 .html() 方法而不是 append,所以: $('.choice_cell_phone').html(cellphone);和 $('.choice_work_phone').html(workphone);这样您就不需要使用额外的变量作为标志来查看它们是否已添加。
  • 在您的 change 事件中,包含以下行:$(this).find("option:selected").prop("disabled", true)。选择此选项后,您将无法再选择它,它将被禁用。 @Leon -- 像这样:jsfiddle.net/CbcmS/24
  • 非常感谢!在项目中使用它

标签: jquery html drop-down-menu append


【解决方案1】:

只需将工作/手机更改为 jQuery 对象:http://jsfiddle.net/maniator/CbcmS/22/

var cellphone = $("<th><label>Cell Phone:</label></th><td><input type='tel' name='cp' value=' ' maxlength='11' /></td>");
var workphone = $("<th><label>Work Phone:</label></th><td><input type='tel' name='wp' value=' ' maxlength='11' /></td>");

【讨论】:

  • 没问题^_^乐于帮助@Leon
  • 假设您想要向该下拉列表添加更多选择选项,我将使用 switch case 语句而不是“if else if”。分叉演示:jsfiddle.net/Za5NL
  • 哦,是的,defs!那是我一开始就应该这样做的,谢谢
【解决方案2】:

如果我理解正确,您不希望 input 加倍。为什么不使用html 而不是append?改变

$('.choice_cell_phone').append(cellphone);

$('.choice_cell_phone').html(cellphone);

演示:http://jsfiddle.net/WHUqH/

注意:如果您需要在不小心单击下拉菜单之前保留某人在文本框中键入的数据,这不会那么有效。最好的办法是

  1. 添加后隐藏特定选项
  2. 在添加的输入旁边添加一个删除按钮
  3. 如果单击删除,则在下拉列表中显示该选项。

【讨论】:

  • 不能同时拥有手机和工作电话,他们会一直互相覆盖。
  • @tymeJV 怎么样?两者似乎都设置了不同的trs - choice_work_phonechoice_cell_phone
  • 这也有效,谢谢!超级干净:) 虽然我认为尼尔的更小
【解决方案3】:

这行得通。我创建了一个新变量来检查是否部署了新输入。

Demo here

$(document).ready(function () {
    var cellextra = 0;
    var workextra = 0;

    var cellphone = "<th><label>Cell Phone:</label></th><td><input type='tel' name='cp' value=' ' maxlength='11' /></td>";
    var workphone = "<th><label>Work Phone:</label></th><td><input type='tel' name='wp' value=' ' maxlength='11' /></td>";

    $('#id_contact_info').change(function () {

        if ($(this).val() == 2 && cellextra == 0) {
            console.log('cell phone');
            $('.choice_cell_phone').append(cellphone);
            cellextra = 1;

        } else if ($(this).val() == 3 && workextra == 0) {
            console.log('work phone');
            $('.choice_work_phone').append(workphone);
            workextra = 1;

        }

    });

});

【讨论】:

  • 我认为他想替换现有输入(如果存在)。
  • 感谢这项工作!虽然我认为尼尔的回答可能是最基本的
  • @Leon,当然 :) 这可能就是他有 57.2k 的原因 :)
【解决方案4】:

只需添加一个额外的条件

if ($('input[type=tel]').length < 2) { 

这将检查输入的长度,仅在长度小于 2 时通过。

Check Fiddle

【讨论】:

  • 如果存在的话,他还需要替换现有的孩子。
【解决方案5】:

您可以检查您的&lt;tr&gt;s 是否已经有孩子,将您的条件更改为:

if ($(this).val() == 2 && $('.choice_cell_phone').children().length == 0) {
    //
} else if ($(this).val() == 3 && $('.choice_work_phone').children().length == 0) {

JSFiddle Demo

【讨论】:

    【解决方案6】:

    基本上,您需要做的就是在检查 select 的 val 时检查页面上是否已经存在输入。我还将您的等价更改为三等号,但这与这里的解决方案无关;由于 JavaScript 评估等价的方式,这只是更好的做法。

    小提琴:http://jsfiddle.net/hApx3/

    $('#id_contact_info').change(function(){
    
            if (($(this).val() === '2') && !$('.choice_cell_phone').children().length) {
                console.log('cell phone');
                $('.choice_cell_phone').append(cellphone);
    
            } else if (($(this).val() === '3') && !$('.choice_work_phone').children().length) {
               console.log('work phone');
               $('.choice_work_phone').append(workphone);
            }
    
        });
    

    【讨论】:

      【解决方案7】:

      您不断将手机和工作选择附加到tr。为您正在创建的每个选项创建一个新的tr 所需的内容。

      【讨论】:

        猜你喜欢
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多