javascript - 使用Jquery点击功能,有的地方执行代码,有的地方不执行

标签 javascript jquery

我可能在这里错过了一些明显的东西,如果是的话提前道歉......

使用 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/

相关文章:

javascript - PHP echo从html下拉列表中选择的值

javascript - 保存动态生成的输入字段

javascript - zmq 和express 错误

javascript - 取消 for 循环中多个元素的挂起 setTimeouts

php - Magicsuggest 与 Codeigniter 输出与帖子用方括号引用

jquery - 使用 Angular 完成这项简单技术的最佳方法是什么?

javascript - 为什么我总是得到 'false' 值?

c# - 美国电话格式需要正则表达式

javascript - 第二个函数在第一个函数完成之前启动,Javascript

javascript - 设置复选框选择的可变限制