如果未单击一组元素,如何触发事件

How to trigger an event if a group of elements have not been clicked

仅当一组元素未被单击时,您才能通过什么方式触发 on blur 样式事件。 例如:如果您想在输入后自定义下拉菜单,这里是我想要实现的 fiddle; http://jsfiddle.net/hruahrpc/ 单击不在第一个列表中的任何元素应该会导致列表折叠。

我试过停止模糊,但我似乎无法让它工作。

$('ul').hide();
$('input').focus(
    function(){    
        $('ul').show()
    }
);
$('.hidelist').click(
    function(){
        $('ul').hide();
    }

)
$('input').blur(
    function(){
        $('ul').hide();
    }
);
.results{
    background-color:pink;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<div class="results">
    <ul>
        <li><a href="#">I have other functionality and I don't hide the list</a></li>
        <li><a href="#">I have other functionality and I don't hide the list</a></li>
        <li><a href="#">I have other functionality and I don't hide the list</a></li>
    </ul>
    <ul class="hidelist">    
        <li><a href="#"  >I make the list disapear</a></li>
    </ul>
</div>


<div>I am any other element and I make the list disapear</div>

单击不在第一个列表中的任何元素应该会导致列表折叠。

我就是这样做的。希望我对您有所帮助。

此致。

$('ul').hide()
$('input').focus(
    function(){    
        $('ul').show()
    }
);

$('input').blur(
    function(e){
        e.preventDefault();
        $('.hidelist').click(function(){
            $('ul').hide();
        });
        // You can handle other thing here
    }
);
.results{
    background-color:pink;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<div class="results">
    <ul>
        <li><a href="#">I have other functionality and I don't hide the list</a></li>
        <li><a href="#">I have other functionality and I don't hide the list</a></li>
        <li><a href="#">I have other functionality and I don't hide the list</a></li>
        <li><a href="#" class="hidelist" >I make the list disapear</a></li>
    </ul>
</div>
</br>
<div>I am any other element and I make the list disapear</div>

或者使用这个:

  $('ul').hide()
    $('input').focus(
        function(){    
            $('ul').show()
        }
    );

    $('.hidelist').click(function(){
         $('ul').hide();
    });

你可以这样做。它有点复杂,但由于事件的顺序,很难想出一种方法来做你想做的事,但这行得通 working fiddle:

Javascript代码:

var stopHide = false;
var okToExecute = false;
var blurTest = false;
var timeout = undefined;
$('ul').hide()
$('#input1').focus(
    function(){
        $('ul').show();
    }
);
$('.hidelist').click(
    function () {
        stopHide = false;
        okToExecute = true;
        $('#input1').blur();
    }
);
$('.dontHide').click(
    function() {
        stopHide = true;
        okToExecute = true;
        $('#input1').blur();
    }
);
$('input').blur(
    function(e){
        e.preventDefault();
        if(okToExecute)
        {
            if(!stopHide)
            {
                $('ul').hide();
            }
            else
            {
                $('#input1').focus();
            }
            okToExecute = false;
            blurTest = true;
        }
        if(timeout == undefined)
        {
            timeout = true;
            setTimeout(function(){console.log(blurTest);if(!blurTest){                      $('ul').hide();}blurTest = false;timeout = undefined;}, 200);
        }
    }
);

HTML:

<input id="input1" type="text" />
<div class="results">
    <ul>
        <li><a href="#" class="dontHide">I have other functionality and I don't hide the list</a></li>
        <li><a href="#" class="dontHide">I have other functionality and I don't hide the list</a></li>
        <li><a href="#" class="dontHide">I have other functionality and I don't hide the list</a></li>
        <li><a href="#" class="hidelist" >I make the list disapear</a></li>
    </ul>
</div>
</br>
<div>I am any other element and I make the list disapear</div>