-1

行(フォーム入力)を追加/削除することでJSを介して動的に変更されるフォーム/テーブルがあります。行数をカウントする列を作成したいので、を使ってみました。

$("#rowcount:last").replaceWith( "<td>" + newNum + "</td>" );

カウンター列の最後の要素を新しい番号に変更しますが、この場合、「:last」セレクターは機能しないようです。参照用のコードは次のとおりです(フォームの醜さをお詫びします。できるだけきれいに見せようとしましたが、経験が限られているため、出生時に間違った側に叩かれているように見えます):

<html>

<head>
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script src="jquery.maskedinput.js" type="text/javascript"></script>

<script type="text/javascript">
    $(document).ready(function() {
        $('#btnAdd').click(function() {
            var num     = $('.ccinput').length; // how many "duplicatable" input fields we currently have
            var newNum  = new Number(num + 1);      // the numeric ID of the new input field being added

            // create the new element via clone(), and manipulate it's ID using newNum value
            var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);

            // insert the new element after the last "duplicatable" input field
            $('#input' + num).after(newElem);
            $("#rowcount").replaceWith( "<td>" + newNum + "</td>" );

            // enable the "remove" button
            $('#btnDel').attr('disabled','');

            $("*#date").mask("99/99/9999");

            // business rule: you can only add 20 names
            if (newNum == 20)
                $('#btnAdd').attr('disabled','disabled');
        });

        $('#btnDel').click(function() {
            var num = $('.ccinput').length; // how many "duplicatable" input fields we currently have
            $('#input' + num).remove();     // remove the last element

            // enable the "add" button
            $('#btnAdd').attr('disabled','');

            // if only one element remains, disable the "remove" button
            if (num-1 == 1)
                $('#btnDel').attr('disabled','disabled');
        });

        $("*#date").mask("99/99/9999");
    });
</script>
</head>

<body>

<form method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
<table border="1" cellspacing="0">
<tr>
<th></th>
<th># (last four digits)</th>
<th>Amount</th>
<th>Approval</th>
<th>Date Received</th>
</tr>
<tbody>
    <tr id="input1" class="ccinput">
    <td id="rowcount"> 1 </td>
    <td> <input id="cnum" type="text" name="cc_num[]" maxlength="4" /> </td> 
    <td> <input id="camnt" type="int" name="cc_amnt[]" /> </td>
    <td> <input id="appr" type="text" name="cc_app[]" maxlength="10" /> </td> 
    <td> <input id="date" type="text" name="cc_date[]" /> </td>
    </tr>
</tbody>
</table>
<div>
    <input type="button" id="btnAdd" value="Add" />
    <input type="button" id="btnDel" value="Remove" />
</div>
<input type="submit" value="Submit" name="submit" />
</form>

</body>
</html>
4

2 に答える 2

3

:lastセレクターを使用できます:

 var newElem = $('.ccinput:last').clone().attr('id', 'input' + newNum);
 $('.ccinput:last').after(newElem);
 $(".ccinput:last td:first").replaceWith( "<td>" + newNum + "</td>" );

または代わりにreplaceWith()試すことができます:

 $(".ccinput:last td:first").html(newNum).removeAttr('id');

デモ

于 2012-08-07T22:25:07.783 に答える
0

コメントするには十分な担当者がいませんが、これは本当にあなたのコメントスレッドへの返信でなければなりません...

あなたの HTML は、正常に動作しておらず、無効な HTML であるため、指定された ID を持つ最初の要素しか取得できないことを除いて、「正常に動作しているように見えます」。つまり、ID が重複していると、HTML は正常に動作しません (無効な HTML であるため)。

行に ID を付与して複製する代わりに、クラスを付与します。そうすれば、HTML は実際に正常に動作します (ID ではなくクラスで選択するように JavaScript を変更する必要があります)。

于 2012-08-07T22:51:59.437 に答える