从中停用单击事件的最佳方式是什么
What is the best way to deactivate a click event from an
在我的网页上,我有一个容器,当点击时会变成其他东西,然后我的意图是让它在点击后保持原样:
<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());
相关文章:
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 为react组件传递道具的最佳方式
- 让Webpack管理Quirky AMD定义的最佳方式
- 在承诺链中处理早期回报的最佳方式
- 在ng重复循环中显示条件内容的最佳方式是什么
- 在phonegap中为android调用onload函数的最佳方式
- 链接两个网页或网络应用程序的最佳方式
- 什么's是连接供应商js文件的最佳方式
- 什么's是在javascript中迭代项的最佳方式
- 在node.js中编写单元测试的最佳方式是什么
- 在页面上记录数据并实现pushstate()的最佳方式
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 什么'这是加载jQuery的最佳方式
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- 在网站上显示.mov作为加载屏幕的最佳方式
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 以角度渲染表中数据的最佳方式
- 删除集合中旧邮件/帖子的最佳方式
- 显示全屏Ajax加载程序的最佳方式
- PHP和JS中表单验证的最佳方式