2013-02-22 26 views
5

Tôi đã tạo một phần Lớp phủ với jQuery.Lỗi cú pháp, biểu thức không được công nhận: # [đối tượng HTMLElement] Lỗi

Tôi gọi với số <a href="javascript:slide(cms);">.
Nhưng tôi gặp lỗi này:

Error: Syntax error, unrecognized expression: #[object HTMLElement] [http://localhost//js/jquery-1.9.1.min.js:4]

Bất kỳ ý tưởng nào? Dưới đây là phương pháp trượt:

function slide(content) { 
    $('#' + content).show(0); 
    $('#' + content).animate({ 
     left: '0%' 
    }, 500); 
} 
$('.c-close').click(function(){ 
    $('.slide').animate({ 
     left: '100%' 
    }, 500); 
    $('.slide').hide(0); 
}); 
+0

How are you gọi đó? – hjpotter92

+2

** cms ** là gì? – letiagoalves

+0

@letiagoalves 'cms.toString()' rõ ràng là '[đối tượng HTMLElement]'. Vì vậy, hoặc là một yếu tố, hoặc đó là sản phẩm của một lỗi khác. –

Trả lời

6

content.toString()[object HTMLElement]. Vì vậy, content là một phần tử (hoặc sản phẩm của một lỗi khác trong phần mã mà chúng ta không thấy).

content là một phần tử, không phải là phần tử, bạn nên sử dụng $(content), không phải $('#'+content).

+0

Nó không thực sự là một giải pháp tốt vì Karen gửi id đến chức năng trượt. Trong trường hợp này vì ID không được gửi dưới dạng chuỗi, javascript sẽ chọn thẻ phù hợp với ID. Nếu Karen muốn sử dụng giải pháp này, cô ấy phải chắc chắn không gửi ID và tin tưởng lựa chọn DOM tự động. Nhưng gửi một phần tử DOM. – Timmetje

+0

Vâng, tôi có nghĩa là nó là một giải pháp tuyệt vời, nhưng Karen phải biết không nên gửi id Element, nhưng một yếu tố thực sự thay. – Timmetje

0

Để sử dụng biến trong bộ chọn jQuery, nó phải là một chuỗi.
Vì vậy, bao quanh cms của bạn với '-><a href="javascript:slide('cms');">

+1

Sử dụng dystroy giải pháp của mình! thế tốt hơn rồi! –

3

Câu trả lời đúng phụ thuộc vào nội dung và cms là.

Bạn gửi cms vì yếu tố của bạn có id với cái tên "cms"

Nếu nội dung là một định danh phần tử DOM bạn nên chắc chắn rằng Id được chuyển dưới dạng chuỗi.

<div id="cms" ></div> 
<a href="javascript:slide('cms');"> 

Và đổi tên chức năng của bạn để nó rõ ràng hơn những gì nó làm:

function slide(element_id) { 
    $('#' + element_id).show(0); 
    $('#' + element_id).animate({ 
     left: '0%' 
    }, 500); 
} 

Có một số giải pháp khác:

Nếu cms là một biến thiết lập trước đó có chứa một phần tử DOM.

Ví dụ:

Javascript:

var cms = $('cms'); 

function slide(content) { 
    content.show(0); 
    content.animate({ 
     left: '0%' 
    }, 500); 
} 

OR:

var cms = document.getElementById("cms"); 

function slide(content) { 
    $(content).show(0); 
    $(content).animate({ 
     left: '0%' 
    }, 500); 
} 

html:

<a href="javascript:slide(cms);">. 

Tùy thuộc vào những gì bạn muốn.

Hãy nhớ rằng nếu bạn sử dụng @dystroy giải pháp của mình rất tốt, không chỉ cần gửi id phần tử làm biến. Nhưng thực sự gửi phần tử dom post-selection.

Giải pháp của tôi sẽ là:

<div id="cms"></div> 
<a href="#" id="slide">slide</a> 
<script> 
    (function(){ 
     $('slide').on('click',function(e){ 
      e.preventDefault(); 
      var slideElement = $('div#cms'); 
      slideElement.show(0); 
      slideElement.animate({ 
       left: '0%' 
      }, 500); 
     }); 
    })(); 
</script> 
Các vấn đề liên quan