2013-02-22 14 views
5

Zrobiłem sekcję nakładki z jQuery.Błąd składniowy, nierozpoznane wyrażenie: # [obiekt HTMLElement] Błąd

To zadzwonię pod numer <a href="javascript:slide(cms);">.
ale pojawia się ten błąd:

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

jakiś pomysł? Oto metoda slajdów:

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

Jak dzwonisz to? – hjpotter92

+2

co to jest ** cms **? – letiagoalves

+0

@ cloiagoalves 'cms.toString()' jest oczywiście '[obiekt HTMLElement]'. Więc albo jest to element, albo jest wynikiem innego błędu. –

Odpowiedz

6

content.toString() jest [object HTMLElement]. Tak więc content jest elementem (lub produktem innego błędu w części kodu, której nie widzimy).

Jako element, a nie jego identyfikator, należy użyć $(content), a nie $('#'+content).

+0

To nie jest dobre rozwiązanie, ponieważ Karen wysyła identyfikator do funkcji slajdów. W tym przypadku, ponieważ identyfikator nie jest wysyłany jako ciąg, javascript wybiera pasujący tag z identyfikatorem. Jeśli Karen chce skorzystać z tego rozwiązania, musi być pewna, że ​​nie wyśle ​​identyfikatora i nie powierza automatycznie wyboru DOM. Ale wyślij element DOM. – Timmetje

+0

Cóż, mam na myśli to świetne rozwiązanie, ale Karen musi wiedzieć, więc nie wysyłaj elementu id, ale prawdziwym elementem zamiast tego. – Timmetje

0

Aby użyć zmiennej w selektorze jQuery, powinien to być łańcuch.
więc otoczyć swoje cms z '-><a href="javascript:slide('cms');">

+1

Wykorzystaj dystroy jego rozwiązanie! to jest lepsze! –

3

Prawo Odpowiedź zależy od tego, jakie treści i CMS.

wysyłać cms, ponieważ element ma identyfikator o nazwie „cms”

Jeśli zawartość jest identyfikatorem elementu DOM należy upewnić się, że Id jest przekazywana jako ciąg znaków.

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

i zmienić swoją funkcję tak jest to bardziej jasne, co robi:

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

Są też inne rozwiązania:

Jeśli CMS to wcześniej ustawić zmienną zawierającą element DOM.

Na przykład.

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);">. 

W zależności od tego, co chcesz.

Pamiętaj, jeśli użyjesz @dystroy jego rozwiązania, które jest bardzo dobre, nie po prostu wyślij identyfikator elementu jako zmienną. Ale faktycznie wyślij post-selection elementu dom.

Moje rozwiązanie byłoby:

<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> 
Powiązane problemy