2013-06-08 12 views
6

Moje pytanie jest dość podstawowe, ale nie rozumiem, dlaczego w poniższym kodzie przycisk kliknąć tylko znika przycisk, zamiast całego Gr:javascript - usunięcie elementu

<script> 
    function remove(id) { 
     //get the element node 
     element = document.getElementById(id); 

     //remove the element from the document 
     document.removeChild(element); 
    } 
</script> 

<div id="intro" class="jumbotron"> 
    <h1>Your Offline Web Dictionary!</h1> 
    <p class="lead"> 

    <div class="controls"> 
     <input class="span7 " type="text" placeholder=" " name="key"> 
    </div> 
    <div> 
     <button class="btn btn-large btn-success" onclick="remove(intro)"> 
      Dictionary Search 
     </button> 
    </div> 
</div> 

JSFiddle

Odpowiedz

4

Problem polega na tym, że element przycisku ma właściwość remove, więc jest wywoływana zamiast funkcji usuwania. A także rzecz sznurka.

<button class="btn btn-large btn-success" onclick="window.remove('intro');console.log(this.remove);"> 
    Search 
</button> 

http://jsfiddle.net/HMEVd/76/

+0

+1 Tak, to całkiem dobre wytłumaczenie. Wielkie dzięki!! Przyjmę to w ciągu kilku minut. – JosephConrad

+0

Dlaczego przycisk 'remove' jest wywoływany? Czy jest jakiś ukryty "z" w akcji? I skąd się bierze to "usunięcie"? To nie jest określona metoda DOM. –

+0

Cóż, widziałem to zachowanie jakiś czas temu i nigdy tak naprawdę go nie kwestionowałem. – Musa

1

intro należy przesłać do funkcji jako ciąg znaków, a nie zmiennej, tzn 'intro'

Ponadto, należy zmienić nazwę funkcji, na przykład, removeById zamiast remove. Wtedy działa idealnie.

Funkcja remove faktycznie robi coś zupełnie innego. (Twój funkcja jest wywoływana nawet gdy jest on nazwany remove jak widać umieszczając komunikat ostrzegawczy do niego.)

function removeById(id) { 
     //get the element node 
     element = document.getElementById(id); 

     //remove the element from the document 
     document.removeChild(element); 
} 

... 
<button class="btn btn-large btn-success" onclick="removeById('intro')"> 
+0

http://jsfiddle.net/HMEVd/70/ – Musa

+0

To nie wyjaśnia objaw OP cytowany: * „na przycisk tylko kliknąć przycisk znika, zamiast całej div” * –

2

dwa problemy. Po pierwsze, intro powinien być ciągiem znaków, a nie identyfikatorem, więc użyj numeru remove('intro') w swoim onclick.

Po drugie, document.rwmoveChild jest niepoprawne. removeChild powinien zostać wywołany na elemencie macierzystym usuwanego elementu. Powszechnie stosuje się:

element.parentNode.removeChild(element); 
+0

Wszystko jest w porządku, ale nie odpowiada na pytanie zadawane przez OP: Dlaczego przycisk, a nie element div, nie znika? –

Powiązane problemy