【问题标题】:jQuery- e.target || e.srcElement not working on classjQuery-e.target || e.srcElement 在课堂上不起作用
【发布时间】:2012-08-08 09:33:12
【问题描述】:

我有一个即时搜索,结果在“instant-search”div 中。还有另一个 div "search-radio" 我保留了选择搜索类别的选项。

我设置了删除结果的文档点击事件,但是在“instant-search”div中点击时结果也消失了。

我设置了一些e.target || e.srcElement 事件以防止结果在“instant-search”div 点击时消失。

这在 Firefox 中完美运行,但在任何其他浏览器中都无法运行。

我的完整 jQuery 代码:

$(document).ready(function () {
 $('#search-radio').css('display', 'block');
 $('#search-input').keyup(function()
    {
     var searchIn = $("input:radio:checked").val();
     var keyword=$(this).val();
     $.get('../search/instant-search.php', {keyword: keyword, searchIn:searchIn}, function(data)
        {
        $('#instant-search').html(data);
         });
         $('#search-result').fadeIn(250);
     });

  $('#search-input').attr('autocomplete','off');
  $('#search-input').attr('placeholder','Search');

  $('#search-input').mouseenter(function(){$('#search-result').fadeIn(250);});
  $('#search-input').mouseleave(function(){$('#search-result').fadeOut(250);});

  $('#search-result').on('mouseenter mouseleave', function()
  { 
      $('#search-result').stop();

      $(document).on('click', function(e) 
       {
        if(
           ((e.target.id || e.srcElement.id) != 'instant-search') 
        && ((e.target.id || e.srcElement.id) != 'search-input') 
        && ((e.target.id || e.srcElement.id) != 'search-result')
        && ((e.target.id || e.srcElement.id) != 'search-radio') 
        && ((e.target.id || e.srcElement.id) !='instant-search-container') 
        && ((e.target || e.srcElement).hasclass != 'instant-search') 
        && ((e.target.id || e.srcElement.id) !='check-all')) 
          {
          $('#search-result').fadeOut(250);
          }
       });

   });

});

我的 HTML 代码:

    <div id="search-wrapper">
<form action="" method="get" id="search-form" >
<div id="search">
<input name="keyword" type="text" size="50"  id="search-input"  />
</div><!--end of search-->

<div id="search-result">
<div id="instant-search"></div><!--end of instant-search-->
<div id="search-radio">
<p>Search In:</p>
  <ul>
      <li><label><input name="search" type="radio" value="all" checked="checked" id="check-all" >All</label></li>
      <li><label><input name="search" type="radio" value="Category2" >Category2</label></li>
      <li><label><input name="search" type="radio" value="Category3" >Category3</label></li>
      <li><label><input name="search" type="radio" value="Category4" >Category4</label></li>
      <li><label><input name="search" type="radio" value="Category5" >Category5</label></li>
  </ul>
</div><!--end of search-radio-->
</div><!--end of search-result-->
</form>
</div><!--end of search-wrapper-->

编辑:请参阅e.target || e.srcElement 不适用于 ul liradio input 仅在其他地方有效。

我希望它适用于所有浏览器。

请查看并提出任何可行的方法。

谢谢。

【问题讨论】:

  • @Raminson 感谢您正确编辑我的代码。你能告诉我这里出了什么问题吗?
  • @Blaine 感谢您再次正确编辑我的代码。
  • np,我希望我能帮助你,但我很难过
  • 看起来您在单击文档时试图排除搜索包装器 div 中的几乎所有元素,是不是全部,如果是这样,为什么不一次将它们全部定位?
  • 是的,我正在尝试排除搜索包装器中的所有元素,如何同时定位所有元素,包括 ul li,我只知道这种方式。

标签: php jquery html search


【解决方案1】:

试试这个:

$(function() {
    $('#search-radio').css('display', 'block');

    $('#search-input').on({
        keyup: function() {
            var searchIn = $("input:radio:checked").val();
            var keyword = this.value;
            $.get('../search/instant-search.php', {
                keyword: keyword,
                searchIn: searchIn
            }, function(data) {
                $('#instant-search').html(data);
            });
            $('#search-result').stop().fadeIn(250);
        },
        mouseenter: function() {
            $('#search-result').stop().fadeIn(250);
        },
        mouseleave: function() {
            $('#search-result').stop().fadeOut(250);
        }
    }).attr('autocomplete', 'off').attr('placeholder', 'Search');

    $('#search-result').on('mouseenter mouseleave', function() {
        $('#search-result').stop();
    });

    $(document).on('click', function(e) {
        var flag = true;
        $.each($('*','#search-wrapper'), function(i,elm) {
            if (e.target===elm) flag=false;
        });
        if (flag) $('#search-result').fadeOut(250);
    });
});​

FIDDLE

【讨论】:

  • 你太棒了,现在它在所有浏览器中都能完美运行。我还有一个问题。当鼠标离开“搜索输入”区域并快速移动到“搜索结果”区域时,淡出横断在两者之间停止,你能检查一下吗?
  • 不确定我是否看到它,但尝试添加一些停靠点。编辑了上面的代码?另请注意,每次单击文档时检查大量元素并不是很有效,但在大多数情况下这不会成为问题。
  • 如果我将 searchIn 命名为 search,为什么 var search 会以绿色突出显示,然后以黑色突出显示。
  • 我真的不知道?您是说选择第一个单选按钮“全部”会使某些内容以绿色突出显示吗?它在所有浏览器中都相同吗?这是在小提琴中还是在您的网站上搜索结果和所有内容?
  • 没有它在这一行被突出显示为绿色 var searchIn = $("input:radio:checked").val(); 就像它现在是一些特殊的 jquery var。
猜你喜欢
  • 2013-08-03
  • 2016-11-15
  • 1970-01-01
  • 2016-03-23
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多