1

为什么来电console.log(this.attr("id"));未定义?

(function( $ ) {
    $.fn.fs_suggest = function(options) {
        console.log(this.attr("id"));
    };
})( jQuery );

$("#places_search").fs_suggest();

这是HTML:

<div class="search_container" id="search">
    <form data-remote="false" method="get" action="/search">
        <input type="text" placeholder="search places" name="query" id="places_search">
        <input type="submit" value="search">
    </form>
</div>

我正在尝试获取对调用 .fs_suggest() 函数的元素的引用,在本例中为 $("#places_search")

4

3 回答 3

8

我想你想要这个:

console.log($(this).attr("id"));

除非我弄错了,否则this指的是一个 DOM 元素(它没有attr函数),而$(this)获取实际的 jQuery 对象(它有)。


如果这(或者我的意思是this?呵呵……)不起作用,那么您只是在不正确的选择器上调用该函数。


在进一步阅读 jQuery 文档后,您的问题似乎出在您提供给我们的上下文之外的其他地方。你是在 DOM 正确加载之前调用你的插件吗?(例如在 之外$(document).ready()

于 2012-05-16T02:23:05.197 回答
0

我不是 100% 这个符号产生的东西:

$.fn.fs_suggest = function(options) {
...

但是如果$.fn解析为一个对象并且fs_suggest是该对象的一个​​属性,那么this函数内部将引用该对象而不是 DOM 元素或 jQuery 包装元素。

于 2012-05-16T02:53:30.923 回答
0

我已经解决了这个问题。问题是我没有将对 fs_suggest() 的调用放在文档就绪块中。所以答案就是这样称呼它。

places.js.coffee:

$ ->    
    $("#places_search").fs_suggest()

在另一个文件中插件:

(function( $ ) {
    $.fn.fs_suggest = function(options) {
        console.log(this.attr("id"));
    };
})( jQuery );

现在将看到“this”,并将等同于 $("#places_search")。

于 2012-05-16T18:32:06.630 回答