【问题标题】:Syntax error, unrecognized expression: #[object HTMLElement] Error语法错误,无法识别的表达式:#[object HTMLElement] Error
【发布时间】:2013-02-22 22:44:29
【问题描述】:

我用 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);
});

【问题讨论】:

  • 你怎么称呼它?
  • @letiagoalves cms.toString() 显然是[object HTMLElement]。所以要么它是一个元素,要么它是另一个错误的产物。
  • 这是一个section的id
  • 所以你应该这样做<a href="javascript:slide('cms');">
  • cms 是一个 ID,当用作变量名时,javascript 会使用 getElementByID 自动获取。

标签: jquery


【解决方案1】:

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

由于content 是一个元素,而不是它的id,你应该使用$(content),而不是$('#'+content)

【讨论】:

  • 这并不是一个很好的解决方案,因为 Karen 会将 id 发送到幻灯片函数。在这种情况下,由于 ID 不是作为字符串发送的,因此 javascript 会选择与 ID 匹配的标记。如果 Karen 想使用这个解决方案,她必须确保不发送 ID 并自动信任 DOM 选择。但是发送一个 DOM 元素。
  • 好吧,我的意思是这是一个很好的解决方案,但 Karen 一定知道不要发送元素 ID,而是发送一个真实元素。
【解决方案2】:

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

您发送 cms 是因为您的元素有一个名为“cms”的 id

如果 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);
}

或者:

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>

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 使用破坏他的解决方案!更好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    相关资源
    最近更新 更多