2016-07-03 16 views
4

私は理解できない本当に厄介な問題を抱えています。削除するボタンは、対象となる要素の代わりに自分自身を削除します

私は2つの段落が含まれているdiv、最初p要素を削除するには、クリック可能なボタンを持っているが、奇妙なことには、ボタンがそれを削除し、自己とp要素が生き続けていることです!

これは私のコードの結果です:

Code's result

しかし、私はボタンをクリックしたときに、私はこの取得:以下

onclick

私のコードです:

<div> 
    <p id="id_1">The first paragraph.</p> 
    <p id="id_2">The second one.</p> 
</div><br> 
<button onclick="remove(document.getElementById('id_1'));">click me!</button> 
<script> 
    function remove(elem) 
    { 
     var parent=elem.parentNode; 
     parent.removeChild(elem); 
    } 

</script> 

答えて

4

関数名 "remove"はbeiボタン要素自体のネイティブの "remove"メソッドによって隠されています。名前を変更すると、期待どおりに動作します。

HTMLの "onfoo"属性で設定されたイベントハンドラは、その要素のDOMノードのメソッド(およびその他のプロパティ)を含む特別に構築されたスコープで実行されます。これは、addEventListener()経由でイベントハンドラをアタッチするためにJavaScriptを使用することが望ましい多くの理由の1つに過ぎません。

+1

インラインイベントハンドラに暗黙の 'with(this)'がありますか?私はそれを知らなかった... –

+0

@MattiVirkkunenはい、あります、それは非常に奇妙で驚くべき "機能"です。 – Pointy

+0

私は今感謝します! –

2

あなたの機能の名前を変更し、その名前にremoveを使用しないでください(理由は@Pointyの回答に含まれています)。これを試してください:

<div> 
    <p id="id_1">The first paragraph.</p> 
    <p id="id_2">The second one.</p> 
</div><br> 
<button onclick="removeElement(document.getElementById('id_1'));">click me! </button> 
<script> 
    function removeElement(elem) 
{ 
    var parent=elem.parentNode; 
    parent.removeChild(elem); 
} 

</script> 
+0

ありがとう@Vahid、この場合、関数名として "remove"が合わない理由を説明して答えを編集してください。 –

関連する問題