【问题标题】:jQuery/HTML - Disable OnClickjQuery/HTML - 禁用 OnClick
【发布时间】:2013-10-11 14:06:07
【问题描述】:

正如标题所说,我正在尝试禁用特定的 OnClick

<div id="test" style="display: block; opacity: 0.89;"></div>

这个 div 是从被混淆的外部脚本加载的,所以我看不到具体的代码。

我试图删除这个

$("#test").click(function(){ return false});
$("#test").unbind();
$("#test").removeAttr("onclick");
//Suggestions which do not work
$('#test').on('click', function(e) {e.preventDefault();return false;});
$("#test").click(function(event){
event.preventDefault();
});

以上都不起作用。

编辑:使用 .unbind("click"); 解决了我的问题;创建 div 之后。

【问题讨论】:

  • 一个 div 没有默认的 onclick 行为,那么你想阻止什么?可能还有更多代码吗?
  • 它是页面上唯一具有该 ID 的元素吗?您是否在 将元素添加到页面后尝试上述 jQuery 代码?
  • 谢谢 nnnnnn,问题是我在创建 div 之前使用了我的代码,现在我添加了 .unbind("click");加载后,它工作正常:)
  • 酷。由于这有效,我已将其添加为答案。

标签: javascript jquery html onclick


【解决方案1】:

你可以加off("click");

Fiddle

$(function () {
    $("#test").click(function(){alert('test');});
    $("#test").off('click');

});

此代码将演示删除以前添加的点击事件。

【讨论】:

  • 是否有相当于“关闭”的“开启”。因为您可能想要重新启用之前关闭的点击事件。
【解决方案2】:

简单的形式,结合jquery和javascript。

// To disable:    

$('#test').each(function (){
    this.style.pointerEvents = 'none'; 
}); 

// To re-enable:
$('#test').each(function (){
    this.style.pointerEvents = 'auto'; 
}); 

因此,您可以更改多个标签的选择器

【讨论】:

  • 这个解决方案不会禁用鼠标在元素上滚动吗?
  • 似乎是唯一保留旧的 onclick 内容的解决方案,因此您无需再次重复!
【解决方案3】:

如果您在将 div 添加到页面之前使用它们,您尝试过的任何选项都不会起作用。因此请务必将您的代码放在创建 div 的其他脚本之后的某个位置.

如果多个元素具有相同的 id,这也是一个问题。

关于您尝试过的个别方法:

$("#test").click(function(){ return false});
$("#test").unbind();
$("#test").removeAttr("onclick");

第一行将向元素添加一个new单击处理程序,以防止默认行为并停止事件传播向上,,但它不会停止其他事件处理程序从运行中绑定到元素 - 特别是如果它们在您的新处理程序之前运行,显然。

第二行将删除使用 jQuery 附加的事件处理程序,但不会删除通过其他方式附加的处理程序。

第三行应该可以删除内联onclick 属性(如果存在),但不能删除使用 jQuery 添加的处理程序。

假设即使在将 div 添加到页面后确保代码运行后您仍然无法停止点击行为,您可以尝试以下操作:

var $test = $("#test").removeAttr("onclick"),
    $contents = $test.contents().detach();
$test.replaceWith($test.clone(false).append($contents));

演示:http://jsfiddle.net/A9tmu/3/

这里的想法是用自己的克隆替换元素,因为克隆版本(使用.clone(false) 创建时)不会保留事件处理程序。我在克隆之前暂时分离了 div 的内容,以便任何子元素都可以保留它们的事件处理程序。

【讨论】:

  • 禁用后如何启用它们?
  • @Robert 从外部脚本重新启用点击处理程序是一个比一开始就尝试禁用它更复杂的用例。如果您不知道原件是如何装订的,您可能无法做到。如果是onclick,您可以在删除之前保存对原始文件的引用。如果原件使用addEventListener(),我认为您无法获得对现有处理程序的引用。
【解决方案4】:
$('#test').on('click', function(e) {e.preventDefault();return false;});

【讨论】:

  • 确保在
    包含到 DOM 之后包含上面的代码。否则使用这个: $(document).on('click', '#test', function(e) {e.preventDefault();return false;});
【解决方案5】:

试试这个:

$("#test").click(function(event) {
    event.preventDefault();
});

【讨论】:

  • return false; 将使用简单的 javascript &lt;a href="http://websiteURL/" onclick="javascript:return false;"&gt;TEST&lt;/a&gt;
  • return false 也适用于 jQuery 事件处理程序,如 the documentation 中所述。
【解决方案6】:

试试这个?

$('#test').unbind('click')

或

   $( "#test" ).bind( "click", handler );
   $( "#test" ).unbind( "click", handler );

试试这个

$( "#test" ).on("click", function () {
  });
$("#test").off("click");

【讨论】:

【解决方案7】:

你可以将unbind点击事件变成click事件:

 $("#test").click(function(){
        $( "#test" ).unbind( "click");
        alert('Jquery/Javascript Event');
    });

Try JsFiddle

【讨论】:

  • 什么是handler?
猜你喜欢
  • 1970-01-01
  • 2016-05-04
  • 2011-06-05
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2016-02-10
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多