使用jQuery

时间:2016-02-02 16:01:49

标签: javascript jquery events onclick inline

此问题实际上与How to remove "onclick" with JQuery?有关。

<div onclick="doSomething();">Click me</div>

根据引用的文章,为jQuery 1.7+删除此内联事件的正确方法是:

// There's only one div in this example
$( "div" ).prop( "onclick", null ).off( "click" );

说我想稍后添加内联onclick事件。我尝试使用prop添加事件,但它无效。但是,使用attr添加所述事件确实有效。

// Does not add event
$( "div" ).prop( "onclick", "doSomething();" ).on( "click ");

// Neither does this
 $( "div" ).prop( "onclick", "doSomething();" );

// This one works
$( "div" ).attr( "onclick", "doSomething();" );

// This one works, too
$( "div" ).attr( "onclick", "doSomething();" ).on( "click" );

有人可以对此有所了解吗?

为了删除内联事件,jQuery 1.7+的当前推荐方法是prop。但是,对于添加内联事件,prop似乎没有响应。 prop是否应该用于添加内联事件,或者我们仅为此目的使用attr这似乎不一致,如果为true:使用prop删除但添加与attr

感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:2)

我假设你的问题只是出于问题,而不是因为你有问题。因为如果你遇到绑定click事件的问题,你应该只使用jQuery&#39; s click()。所以为了回答你的问题,我认为区别在于:

$( "div" ).prop( "onclick", null ).off( "click" );

不会从DOM的属性中删除onclick="",而只是禁用后端&#39; click事件的处理程序,如果你知道我的意思。源代码仍然会说onclick=""(该属性仍然存在),但是click事件与""之间的任何内容的实际绑定都被破坏了。

使用removeAttr()attr('onclick',''),onclick属性实际上完全从源/ HTML / DOM中删除(并且无法再重新启用,unles属性会再次添加)。

逻辑上,您可以通过添加如下所示的onclick属性将某些内容添加回源/ HTML:attr('onclick','doSometing();'。这仍然必须激活(使用bind(click)click()),因为该元素已经在DOM中。但是,您无法使用prop("onclick","doSometing();")激活oncl​​ick,因为这需要首先存在属性。

简而言之:您可以禁用(不删除,但禁用)内联onclick with prop,但如果它不存在则无法启用它。

另外,一般来说,不要添加内联的onclick属性,如果可以的话,根本不要使用它们:)