从中停用单击事件的最佳方式是什么

What is the best way to deactivate a click event from an

本文关键字:最佳 方式 是什么 事件 单击      更新时间:2023-09-26

在我的网页上,我有一个容器,当点击时会变成其他东西,然后我的意图是让它在点击后保持原样:

                <div id="macheps-holder">
                   <p>Click here to see your browser's machine epsilon!</p>
                    <script type="text/javascript">
                        $(document).ready()
                        {
                            var temp1 = 1.0, temp2, macheps;
                            do {
                                macheps = temp1
                                temp1 /= 2
                                temp2 = 1.0 + temp1
                            } while (temp2 > 1.0)
                            var mh = $('#macheps-holder');
                            mh.click(function()
                            {
                                mh.html("<p>Your browsers machine epsilon is <code>" + macheps + "</code></p>");
                                mh.click(function()
                                {
                                    return;
                                })
                            });
                        }
                    </script>
                </div>

你也可以看到,我所做的是制作click函数的主体,将click函数更改为return;,即什么都不做。我想知道是否有一种更优雅、更恰当的方式来完成这种行为。

谢谢你抽出时间。

你所做的,并不是在做你认为它在做的。。。在每次点击中,第一个点击处理程序将被执行,它将用相同的文本重置元素的html,然后添加一个新的空点击处理程序。。。下一次单击将执行第一个处理程序以及新添加的空白处理程序。。。因此,在第4次点击时,您将执行第一个处理程序一次,空白处理程序执行3次

问题

$(document).ready(function() {
  var temp1 = 1.0,
    temp2, macheps, counter;
  do {
    macheps = temp1
    temp1 = temp1 / 2
    temp2 = 1.0 + temp1
  } while (temp2 > 1.0)
  var mh = $('#macheps-holder');
  mh.click(function() {
    counter = 0;
    log('default handler');
    mh.html("<p>Your browsers machine epsilon is <code>" + macheps + "</code></p>");
    mh.click(function() {
      log('click: ' + counter++)
      return;
    })
  });
})
var log = (function() {
  var $log = $('#log');
  return function(msg) {
    $('<p/>', {
      text: msg
    }).appendTo($log)
  }
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="macheps-holder">
  <p>Click here to see your browser's machine epsilon!</p>
</div>
<div id="log"></div>

由于您希望点击处理程序只执行一次,请使用.one()

$(document).ready(function () {
    var temp1 = 1.0,
        temp2, macheps;
    do {
        macheps = temp1
        temp1 /= 2
        temp2 = 1.0 + temp1
    } while (temp2 > 1.0)
        var mh = $('#macheps-holder');
    mh.one('click', function () {
        mh.html("<p>Your browsers machine epsilon is <code>" + macheps + "</code></p>");
    });
})

首先jQuery的ready函数不正确。您应该向它传递一个callback,如下所示:

$(document).ready(function() { ... })

第二。您可以为click事件创建一个单独的函数callback,并从event listener list中添加或删除。所以你可以写以下内容:

function clickHandler(event) { ... }
// add
mh.on('click', clickHandler);
// remove
mh.off('click', clickHandler);

最后的代码如下:

$(document).ready(function() {
  var temp1 = 1.0,
    temp2, macheps;
  do {
    macheps = temp1
    temp1 /= 2
    temp2 = 1.0 + temp1
  } while (temp2 > 1.0)
  var mh = $('#macheps-holder');
  function clickHandler() {
    mh.html("<p>Your browsers machine epsilon is <code>" + macheps + "</code></p>");
    mh.off('click', clickHandler);  // remove click event handler
  }
  mh.on('click', clickHandler);  // add click event handler
})

您可以阅读更多关于jQuery的开启和关闭功能的信息。

您可以在这里使用.one(),它只允许单击您的链接一次,请参阅下面的代码。

one()API文档

<script type="text/javascript">
   $(document).ready()
   {
     var temp1 = 1.0, temp2, macheps;
     do {
          macheps = temp1
          temp1 /= 2
          temp2 = 1.0 + temp1
     } while (temp2 > 1.0)
    var mh = $('#macheps-holder');
    mh.one('click',function()
    {
       mh.html("<p>Your browsers machine epsilon is <code>" + macheps + "</code></p>");
    });
  }

我希望你正在寻找点击功能,这是第一次‘’

为此,你可以取一个全局变量

var count = 0;
mh.click(function()
{
++count;
if(count>=1)
{
    return ;
}
 mh.html("<p>Your browsers machine epsilon is <code>" + macheps + "</code></p>");

});

您的代码有一些问题。试试这个:

$(document).ready(function() {
  var temp1 = 1.0,
    temp2, macheps;
  do {
    macheps = temp1
    temp1 /= 2
    temp2 = 1.0 + temp1
  } while (temp2 > 1.0)
  var mh = $('#macheps-holder');
  mh.click(function(e) {
    mh.html("<p>Your browsers machine epsilon is <code>" + macheps + "</code></p>");
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div id="macheps-holder">
  <p>Click here to see your browser's machine epsilon!</p>
</div>

用类似的简单方法

function DoThisClick()
{
 //logic for clicking
  $("#yourbuttonid").unbind("click");
}
$("#yourbuttonid").bind("click",Dothis());