鍍金池/ 問答/HTML/ jquery中給一開始visibility:hidden的元素綁定click事件

jquery中給一開始visibility:hidden的元素綁定click事件不生效?

一開始有一個ul列表visibility:hidden,使用jquery為其中的li綁定click事件,點擊一個按鈕它顯示,然后點擊li沒觸發(fā)綁定的click事件。

然后去掉一開始 visibility:hidden,綁定的事件就可以了。

請問有沒有什么解決辦法,還是我的寫法有問題?

<div class="div-search-helper">
    <input class="scene-search-input js-search-select1" type="text" style="margin-left:10px;" placeholder="請輸入問答助手名稱,并選擇" />
    <ul class="ul-helper-search js-ul-helper">
        <li>阿斯達11</li>
        <li>阿斯達1</li>
        <li>阿斯達2</li>
        <li>阿斯達2</li>
        <li>阿斯達</li>
        <li>阿斯達0</li>
        <li>阿斯達0</li>
        <li>阿斯達0</li>
    </ul>
</div>

$('.js-search-select1').focusin(function(){
        $('.js-ul-helper').css('visibility','visible')

        $('.js-ul-helper').on('click','li',function(){
            console.log('asdasdasd')
            $('.js-search-select1').val($(this).text())
        })
    })

    $('.div-search-helper').on('click','li',function(){
        console.log($(this).text())
        $('.js-search-select1').val($(this).text())
    })
$('.js-search-select1').focusout(function(){
    $('.js-ul-helper').css('visibility','hidden')
})


.div-search-helper {
    display: inline-block;
    position: relative;
}
.ul-helper-search {
    position: absolute;
    left: 10px;
    width: 270px;
    border: 1px solid #eeeeee;
    border-top: none;
    background: #FFF;
    height: 200px;
    overflow-y: auto;
    z-index: 1;
    visibility: hidden;
}
.ul-helper-search::-webkit-scrollbar {display:none}
.ul-helper-search li {
    padding: 2px 5px;
}
.ul-helper-search li:hover {
    cursor: pointer;
    background: rgba(220, 220, 220,0.5);
}
.ul-helper-search li+li {
    border-top: 1px solid rgba(220, 220, 220,0.5);
}
回答
編輯回答
舊言

hidden了你還能點得到

2018年4月20日 00:36
編輯回答
下墜

應(yīng)該用代理就行了。

另外你的寫法在哪呢?


  1. 綁定事件統(tǒng)一用.on()
  2. 這種其實我推薦你用代理,寫成:

    $('.js-ul-helper').on('click', 'li', function(){
      alert('test');
    });

    這種形式。你拿一個類DOM集合得遍歷一圈,然后再找它們的子類集合,這性能有點差啊……

  3. 另外事件回調(diào)不要嵌套……
2017年5月23日 17:44
編輯回答
默念

改成這樣可以了,先湊合用吧…

 $('.js-search-select1').focusin(function(){
    // $('.js-ul-helper').css('visibility','visible')
    $('.js-ul-helper').show()

    $('.div-search-helper').on('click','li',function(){
        console.log('asdasdasd')
        $('.js-search-select1').val($(this).text())
    })
})

$('.js-search-select1').focusout(function(){
    $('.js-ul-helper').hide(500)
    // $('.js-ul-helper').css('visibility','hidden')
})
2017年2月2日 12:25