5

伙计们!

我真的在尽我所能来解决下面的问题,但是几个小时后我看不到正确的路径!让我解释:

  • 我有一个元素 a-href (#opener),单击它时会触发一个 jQueryUI 模态对话框,该对话框通过 ajax 加载 div (#target) 内的 URL。
  • 一切都很完美,但我希望这发生一次!
  • 加载模态窗口后,我能够为我的#opener a-href 设置一个类(.deactivated)并删除 id(#opener)以防止再次触发该操作,但是它不起作用...... a-href 保持可点击状态,并在我点击它时多次打开模式窗口(#target)!
  • 我找到的唯一解决方案是从 DOM 中完全删除 a-href --- 使用 $(this).fadeOut(); ---,但这真的很难看,因为我的链接#opener 就这样消失了。

有任何想法吗?非常感谢你。G。

<script>
$(document).ready(function() {
    $('#opener').click (function() {

        $('#target').load ('http://my.url', function(){
            $('#target').dialog({
                title: 'My Title',
                draggable: true,
                dialogClass:'My Class',
                modal: true,
                hide: { effect: 'fade', speed: 'fast' },
                show: { effect: 'fade', speed: 'fast' },
                closeOnEscape: true,
                closeText: 'Close',
                beforeClose: function(event, ui) { 
                   'window.location.reload(true)'
                },
            });//end dialog   
        });
        $(this).addClass('.deactivated');
        $(this).removeAttr('id');
    });
});

4

4 回答 4

8

从元素中删除 ID 不会删除绑定在该元素上的任何处理程序(除非您使用了“事件委托”)。

.one使用(而不是.on或 obsolete )绑定 click 事件.bind,然后在第一次触发后自动取消绑定处理程序:

$('#opener').one('click', ...)

或者在点击处理程序中禁用事件:

$('#opener').on('click', function() {
    ...
    $(this).off('click').addClass('.deactivated');
});

注意:始终使用较新的.on(or .one) 和.off函数而不是.bind, or.click等​​是一种很好的做法。它使事件处理代码更加一致,并避免与如何.click用于注册事件处理程序或(不带参数)触发事件处理程序。

于 2013-03-15T12:54:09.793 回答
4

描述

.one(),将处理程序附加到元素的事件。每个元素最多执行一次处理程序。

$('#opener').one('click',function(){
     //your code
    });
于 2013-03-15T12:53:05.740 回答
2

您可以使用该.one()函数设置一个仅触发一次的事件处理程序,然后将其自身删除:

$('#opener').one('click', function(event) {
    // your code here
});
于 2013-03-15T12:54:13.103 回答
2

使用one

$('#opener').one("click", function() {

});

http://api.jquery.com/one/

于 2013-03-15T12:55:02.503 回答