描述
我想从一个元素中删除一个onclick属性,而是将它的函数绑定到它的click事件。
$("[onclick]").each(function() {
//Entfernt normales Event
$(this).off("click");
//bindet altes Event
try {
$(this).on( "click", $(this).attr("onclick"));
document.write('successly freed onclick');
} catch(e) {
document.write('failed');
console.warn(e);
$("[error]").val(e);
}
//Entfernt attribut (cosmetic)
$(this).removeAttr("onclick");
});
textarea {
position: absolute;
background: whitesmoke;
color: dimgray;
font-family: monospace;
top: 15%;
left: 0;
border: red 2px solid;
resize: none;
height: 40vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onclick="alert('beep')">Boo</button>
<textarea error></textarea>
但这失败了。
未捕获的TypeError:无法在字符串x
上创建属性'guid'有人可以帮我吗?
链接到测试用例
答案 0 :(得分:1)
您需要使用prop('onclick')
代替attr
,因为attr
将返回一个简单的字符串。 jQuery试图将字符串alert('beep')
放入函数中以将其分配给点击,并在jQuery中导致一些错误。
prop()
获取匹配元素集中第一个元素的属性值,或为每个匹配元素设置一个或多个属性。
attr()
获取匹配元素集中第一个元素的属性值,或为每个匹配元素设置一个或多个属性。
$("[onclick]").each(function() {
//Entfernt normales Event
$(this).off("click");
//bindet altes Event
try {
console.log($(this).prop("onclick"));
$(this).on( "click", $(this).prop("onclick"));
document.write('successly freed onclick');
}
catch(e) {
document.write('failed');
console.warn(e);
$("[error]").val(e);
}
$(this).removeAttr("onclick")
});
&#13;
textarea {
position: absolute;
background: whitesmoke;
color: dimgray;
font-family: monospace;
top: 15%;
left: 0;
border: red 2px solid;
resize: none;
height: 40vh;
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onclick="alert('beep')">Boo</button>
<textarea error>
</textarea>
&#13;