$(this).hide() 隐藏不应该隐藏的容器

Posted

技术标签:

【中文标题】$(this).hide() 隐藏不应该隐藏的容器【英文标题】:$(this).hide() hides containers it shouldn't 【发布时间】:2018-02-27 19:14:22 【问题描述】:

我有一小段代码可以过滤结果列表并隐藏不匹配的 div。我正在为 PhoneGap ios 应用程序编写此内容。它在 android 上运行良好,但在 iOS 上由于某种原因它在输入几个字符后隐藏了整个搜索字段,而不仅仅是结果。

知道为什么吗?我已经将它剥离到几乎只有 html 代码和 jQuery 并且它仍在发生。我尝试注释掉$(this).hide(); 部分并且它停止隐藏搜索字段,所以我认为这是罪魁祸首,但我不知道为什么或如何解决这个问题。连续玩了10个小时。有任何想法吗?也许我可以通过其他方式来定位结果?

$('#box_search').keyup(function() 

  var valThis = $(this).val().toLowerCase();

  if (valThis == "") 
    $('#listing-results > .listing_container').show();

   else 
    $('#listing-results > .listing_container').each(function()     
      var text = ($(this).find('.listing_results_text_name').text() + $(this).find('.listing_results_text_name').data("alt")).toLowerCase();

      if (text.indexOf(valThis) >= 0) 
        $(this).show();
       else 
        $(this).hide();
      
    );
  ;
);

【问题讨论】:

也分享您的 HTML 代码.. 【参考方案1】:

显然我看不到 html,但有时它有助于清理代码并稍微更改逻辑

var box_search = function(e)

  var myIndex = $(this).val();
  val = (!myIndex || myIndex==='')?false:myIndex;

  if(!myIndex)
    $('#listing-results > .listing_container').show();
    return;
  

  //
  $('#listing-results > .listing_container').each(function() 

    var text = $(this).find('.listing_results_text_name').text() + 
               $(this).find('.listing_results_text_name').data("alt")

    text = (!text || text==='')?false:text;

    text = text.toLowerCase();

    if(text.indexOf(myIndex.toLowerCase()) >= 0)
     $(this).show();
      return;
    
    $(this).hide();
  );

 //end of function

$('.box_search').keyup(box_search);

【讨论】:

以上是关于$(this).hide() 隐藏不应该隐藏的容器的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 实例

Winform启动时隐藏不显示

构建类型上不存在属性“隐藏”

jQuery用法

jquery基本语法

重构改善既有代码设计--重构手法14:Hide Delegate (隐藏委托关系)