0
<html>
<title>
</title>
<head>
<link rel="stylesheet" href="new_2.css"  type="text/css"/>
<script src="jquery-1.10.2.min.js"></script>
<script>
function AddingTextBoxes() {
    var NumOfText = $("#NumOfTextBoxes").val();
    $('#NewlyCreatedSelectBoxes').empty();
    for (i = 1; i <= NumOfText; i++) {
    var ipBoxName = "MyInput" + i;
    var $div = $('<div/>').addClass('row jsRow');

    $('<input/>').attr('type', 'text')
                 .attr('name', 'textbx[]')
                 .attr('id',   'TxtBx_' + i)
                 .attr('value', i)
                 .addClass('txtbx')
                 .appendTo($div);

    $('<input/>').attr('type', 'text')
                 .attr('name', 'textbx[]')
                 .addClass('txtbx2')
                 .appendTo($div);

    $('<select/>').attr('id', 'SelectOption_' + i)
                  .append( $('<option/>').text('Text_Box') )
                  .append( $('<option/>').text('Text_Area') )
                  .append( $('<option/>').text('Radio_Button') )
                  .addClass('selectbx')
                  .appendTo($div);

    $('<button/>').attr('id', 'Child_Btn_' + i)
                  .attr('value', 'B')
                  .text('Click for child selections')
                  .on('click', ChildTxtBoxes)
                  .appendTo($div);

    $('<div/>').addClass('BtnSet').appendTo($div);

    $div.appendTo($('#NewlyCreatedSelectBoxes'));

}
return false;
}

function ChildTxtBoxes() {
    var $this   = $(this);
    var $BtnSet = $this.closest('div').find('.BtnSet');
    var idBase  = 'TxtID_' + $this.attr('id').split('_').slice(-1) + '_';

    var retVal = prompt("Enter the number of textboxes need to add");

    console.log($BtnSet);
$BtnSet.empty();
for (i = 1; i <= retVal; i++) {
    $('<input/>').attr('id', idBase + i)
                 .attr('type', 'text')
                 .attr('name', 'textbx[]')
                 .appendTo($('<div/>').appendTo($BtnSet));
}
alert("AAAAAAAAAAAAAAA");
}



</script>
</head>
<body>
<form >
<div id="PHPForms" >
<!--Designing PHP forms dynamically-->
<label>Form Heading</label><input type="text"/><br><br>
<input id="NumOfTextBoxes" type="text" value="0"></input>
<button id="addem" onclick="return AddingTextBoxes()">Add Textboxes</button>

<div id="NewlyCreatedSelectBoxes">

</div>

<div id='BtnSet'></div></div>
</form>
</body>
</html>

在这个例子中,一旦我click点击“点击子选项”按钮,如果我不使用$('#BtnSet').empty();方法,它会完美地打印我给出的文本框的数量。但是,一旦我在弹出文本框中重新输入另一个值,它就会打印文本框,而不会清空前一组文本框。如果我打印使用$('#BtnSet').empty();它只会分配空间。那么,为了完美地发挥功能,我应该做些什么改变。?

4

1 回答 1

0

部分问题在于这个逻辑:

  • 您在 id 中缺少一个结尾“'”
  • id='BtnSet' 的多个元素将被添加到文档中。
  • 您正在清除#BtnSet,但<br>元素将保留

您可以通过将每一行包装在一个包含元素中并在您的元素上使用额外的标记来进行选择,而不仅仅是 ID 来清理它。

我还建议您删除所有用于定位的&nbsp;and<br>并改用 CSS。

我相信这个更新代码会在不改变太多原始标记和代码的情况下做你想做的事情:

Demo Fiddle

function AddingTextBoxes() {
    var NumOfText = $("#NumOfTextBoxes").val();
    $('#NewlyCreatedSelectBoxes').empty();
    for (i = 1; i <= NumOfText; i++) {
        var ipBoxName = "MyInput" + i;

        // Wrap your row in a containing div with a class of 'jsRow'
        var $div = $('<div/>').addClass('jsRow');
        var txtBoxAutoNumbering = "<input type='text' name='textbx[]' id='TxtBx" + i + "'     style='width:50px;' value=" + i + " />&nbsp;&nbsp;&nbsp;";
        $div.append(txtBoxAutoNumbering);
        var txtBox = "<input type='text' name='textbx[]'/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
        $div.append(txtBox);

        var Select_SelectionOptions = "<select id='SelectOption'><option>Text_Box</option><option>Text_Area</option><option>Radio_Button</option></select>&nbsp;&nbsp;&nbsp;";
        $div.append(Select_SelectionOptions);

        var Select_For_Multiple_Choices = "<button type='button' onclick='ChildTxtBoxes(this)' id='Child_Btn" + i + "' value='B'>Click for child selections</button><br>";
        $div.append(Select_For_Multiple_Choices);
        $div.appendTo($('#NewlyCreatedSelectBoxes'));
    }
    return false;
}

function ChildTxtBoxes(item) {
    // Use nextUntil to remove any divs with class `BtnSet` after it
    $(item).nextUntil('.jsRow').remove();
    var retVal = prompt("Enter the number of textboxes need to add");

    for (i = 1; i <= retVal; i++) {
        $(item).after("<div class='BtnSet' i><input id='TxtID" + i + "' type='text' name='textbx[]'/></div>");
    }
}
于 2013-09-13T17:21:16.960 回答