此问题实际上与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
。
感谢您提前提供任何帮助。
答案 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();")
激活onclick,因为这需要首先存在属性。
简而言之:您可以禁用(不删除,但禁用)内联onclick with prop,但如果它不存在则无法启用它。
另外,一般来说,不要添加内联的onclick属性,如果可以的话,根本不要使用它们:)