语法错误,无法识别的表达式:#[object HTMLElement]错误

时间:2013-02-22 14:22:29

标签: jquery

我使用jQuery创建了一个Overlay部分。

我打电话给<a href="javascript:slide(cms);"> 但是我得到了这个错误:

  

错误:语法错误,无法识别的表达式:#[object HTMLElement]   [HTTP://localhost//js/jquery-1.9.1.min.js:4]

有什么想法吗?这是幻灯片方法:

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

3 个答案:

答案 0 :(得分:7)

content.toString()[object HTMLElement]。所以content是一个元素(或者我们没有看到的代码部分中另一个bug的产物)。

由于content是一个元素,而不是其ID,您应该使用$(content),而不是$('#'+content)

答案 1 :(得分:3)

正确的答案取决于什么内容和cms。

您发送cms是因为您的元素的ID为“cms”

如果content是DOM元素标识符,则应确保将Id作为字符串传递。

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

并重命名您的功能,以便更清楚它的作用:

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

还有其他一些解决方案:

如果cms是先前设置的包含DOm元素的变量。

例如。

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

取决于你想要的东西。

请记住,如果你使用@dystroy他的解决方案非常好,而不是简单地将元素id作为变量发送。但实际上是在选择后发送dom元素。

我的解决方案是:

<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>

答案 2 :(得分:0)

要在jQuery选择器中使用变量,它应该是一个字符串 所以用< - >&gt;围绕 cms <a href="javascript:slide('cms');">