2013-06-08 51 views
6

Câu hỏi của tôi là khá tiểu học, nhưng tôi không hiểu tại sao, trong đoạn mã sau, vào nút bấm duy nhất dissapears nút, thay vì toàn bộ div:javascript - loại bỏ yếu tố

<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

Trả lời

4

Vấn đề là phần tử nút có thuộc tính xóa để được gọi thay vì chức năng xóa của bạn. Và cũng là điều chuỗi.

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

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

+0

+1 Có, đó là lời giải thích khá tốt. Cảm ơn rất nhiều!! Tôi sẽ chấp nhận nó trong vòng vài phút. – JosephConrad

+0

Tại sao nút 'remove' của nút được gọi? Có một số ẩn chứa 'with' trong hành động? Và 'cái này' đến từ đâu? Nó không phải là một phương thức DOM được chỉ định. –

+0

Tôi đã thấy hành vi này một thời gian trở lại và không bao giờ thực sự đặt câu hỏi đó. – Musa

1

intro phải được gửi đến hàm dưới dạng chuỗi thay vì biến, tức là, 'intro'

Ngoài ra, bạn phải đổi tên hàm của mình, ví dụ: removeById thay vì remove. Sau đó, nó hoạt động hoàn hảo.

Chức năng remove thực sự làm điều gì đó hoàn toàn khác. (Hàm của bạn thậm chí không được gọi khi nó được đặt tên là remove như bạn có thể thấy bằng cách đặt một thông báo cảnh báo vào nó.)

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

này không giải thích triệu chứng OP trích dẫn: * "trên nút bấm duy nhất dissapears nút, thay vì toàn bộ div" * –

2

Hai vấn đề. Trước tiên, intro phải là một chuỗi, không phải là số nhận dạng, vì vậy hãy sử dụng remove('intro') trong onclick của bạn.

Thứ hai, document.rwmoveChild không chính xác. removeChild nên được gọi trên phụ huynh của phần tử bạn đang xóa. Việc sử dụng phổ biến là:

element.parentNode.removeChild(element); 
+0

Tất cả khá chính xác, nhưng nó không trả lời câu hỏi mà OP hỏi: Tại sao nút, không phải div, biến mất? –

Các vấn đề liên quan