1

次のコードを Firefox 経由で実行し、[X] ボタンをクリックすると、javascript は tmpField を未定義として返します。divであるボタンのparentNodeを取得する必要があります。

<head>
    <title></title>
    <script type ="text/javascript">
        function RemoveItem() {
                if (document.addEventListener) {
                    var container = document.getElementById("InputContainer");
                    var tmpField = this.parentNode;
                    alert("Field: " + tmpField);                 
                }
        }
    </script>
</head>
<body>
<table width="100%">
<tr>
    <td style="width: 10%; vertical-align:top;">Field:</td>
    <td id="InputContainer">
        <div id="divInput1" style="display: inline;">
            <input id="txtComment1" name="txtComment" type="text" maxlength="35" />
            <input id="btnDelete1" value="X" type="button" name="btnDelete" onclick="RemoveItem()" />
        </div>
    </td>
</tr>
</table>
</body>
</html>

私のシナリオでは、「InputContainer」内に複数の div を動的に作成します。これらの div のそれぞれは、テキスト ボックスと削除ボタンを含む同じ構造を持っています (ID には次の増分が含まれます)。常にdivになるボタンのparentNodeを返すことができることが重要です。IE では動作するが Firefox では動作しないコードがあります。解決方法はありますか?

ありがとう...

4

1 に答える 1

1

次の HTML を使用します。

<input id="btnDelete1" value="X" type="button" name="btnDelete" onclick="RemoveItem(this)" />

そして、このJS:

function RemoveItem(button) {
    var container = document.getElementById("InputContainer");
    var tmpField = button.parentNode;
    alert("Field: " + tmpField);
}

デモ: http://jsfiddle.net/jwpds/1/

RemoveItem関数呼び出しのコンテキストはグローバルであるため、thisを参照してwindowください。特定の要素がクリックされるようにするには、関数呼び出しを渡しthis、関数内のパラメーターとしてアクセスする必要があります。

そして、なぜあなたが をチェックしていたのかdocument.addEventListenerわかりませんが、あなたがやっていることでそれを必要としないことは保証できます.

于 2013-04-08T21:09:56.230 に答える