我已经烘焙了一个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
在这种情况下会出现此错误,我写错了?
答案 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 }}