我可能在这里错过了一些明显的东西,如果是的话提前道歉......
使用 ajax-solr 并实现我自己版本的当前搜索小部件示例/教程 - https://github.com/evolvingweb/ajax-solr/wiki/Reuters-tutorial%3A-step-5我有一个代码片段,如下所示:
(function($) {
AjaxSolr.CurrentSearchWidget = AjaxSolr.AbstractWidget.extend({
start: 0,
afterRequest: function() {
var self = this;
var links = [];
var q = self.manager.store.get('q').val();
var qText = q;
if (q != null && q != '*:*') {
if (q.split(':').length == 2) {
qText = q.split(':')[1];
}
links.push($('<a href="#" class="cur-search"></a>')
.text('search: ' + qText + ' (remove)').click(function() {
localStorage.removeItem("query");
localStorage.setItem("query", "*");
self.manager.store.get('q').val('*:*');
self.doRequest();
return false;
}));
}
var fq = self.manager.store.values('fq');
var prettyText = "";
for (var i = 0, l = fq.length; i < l; i++) {
//string manipulation for user-facing text
links.push($('<a href="#" class="cur-search"></a>')
.text(prettyText + ' (remove)').click(self.removeFacet(fq[i])));
//local storage stuff
}
if (links.length > 1) {
links.unshift($('<a href="#" class="cur-search"></a>')
.text('remove all').click(function() {
localStorage.clear();
localStorage.setItem("query", "*");
self.manager.store.get('q').val('*');
self.manager.store.remove('fq');
self.doRequest();
return false;
}));
}
//update DOM
},
我已经删除了不必要的代码,但上面的工作正常。但是,如果我改变
links.push($('<a href="#" class="cur-search"></a>')
.text(prettyText + ' (remove)')
.click(self.removeFacet(fq[i])));
按照上面和下面的示例使用函数,例如
links.push($('<a href="#" class="cur-search"></a>')
.text(prettyText + ' (remove)')
.click(function () {
self.removeFacet(fq[i]);
}));
这样我就可以在那里添加额外的代码,当单击 anchor 时它不再运行removeFacet。感谢您对我所缺少的内容提供任何帮助!
最佳答案
这似乎是函数作用域的问题。这不再指向您的对象。我建议像这样绑定(bind)你的“ self ”对象。
links.push($('<a href="#" class="cur-search"></a>')
.text(prettyText + ' (remove)')
.click(function () {
var self = this;
self.removeFacet(fq[i]);
}).bind(self));
关于javascript - 使用Jquery点击功能,有的地方执行代码,有的地方不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41556081/