在.find()之后链接插件时出现意外的jQuery语法错误

时间:2012-12-14 09:41:09

标签: javascript jquery jquery-plugins syntax-error

我已经烘焙了一个plug-in来处理我在整个大网站上使用的输入字段的运行时搜索。

这个插件在各种情况下都很完美但是这个{ {3}}

$(document).ready(function () {
    var callback_methods = { /* methods here */ };
    var input_html = '<div class="search"><input name="search-field" value="Search..."></div>';
    $(document).on('click', 'div.add', function (event) {
        if (!$('li div.add + div').hasClass('search')) {
            var input = $(this).after(input_html).parent().find('input');
            input.focus();
            input.hunter({url:'<?php echo $this->request->base; ?>/searches', callback:callback_methods, var_name:'data[Search][term]'});
            // other code after
        }
    });
});​

如果我评论猎人插件一切正常。

我确信它是如何构建的一个概念,这里是代码:http://jsfiddle.net/tonino/v8d2A/

为什么我的plug-in在这种情况下会出现此错误,我写错了?

2 个答案:

答案 0 :(得分:1)

问题在于您的代码的这一部分:

var selector = this.selector;

var def_css = {backgroundPosition:'-16px center', paddingLeft:$(selector).css('padding-left')}
if (settings.loader) { setStyle(def_css); }
   var selector = this.selector;

以后:

$(this.selector).blur(function () {

首先,当if条件满足时,你的代码将无法工作,因为你试图在if块中重新声明变量'selector'。把var语句留在那里:

if (settings.loader) { setStyle(def_css); }
  selector = this.selector;

但你的主要问题是'this.selector'包含'.parent()输入',我怀疑它是一个有效的jQuery选择器。

你为什么这样做?为什么不使用$(this)将它保存到变量中并使用这个???

例如:

// first line in your plugin
$this = $(this) 


// later you could use the $this var
$this.blur(function () {

答案 1 :(得分:0)

要摆脱错误,请更改此行:

var input = $(this).after(input_html).parent().find('input');

以下内容:

var input = $(input_html).insertAfter($(this));

核心问题是jquery.hunter插件由于某种原因使用了this.selector变量 - 你不需要这个 - 插件应该使用$(this)而不是{{1 }}