现在首先在每个人给出答案“不要使用内联事件”之前让我先说我没有使用内联事件,我只是想清理其他人编码的内容而无法进入并修复所有的代码。
因此,我编写了一个小函数来将内联事件转换为 jQuery 事件,但它部分使用了 new Function()。它有效,但我知道它通常可以清理得更好。
var transferInlineEvents = function(element){
var attributes = $(element).get(0).attributes;
$(attributes).each(function(i){
if (/^on/.test(this.name)) {
var handler = this.name.replace(/^on/, '');
var evt = this.value;
evt = evt.replace('$(this)', "$('#"+$(element).attr('id')+"')");
$(element).on(handler, function(){
var newEvent = (jQuery.support.boxModel) ? new Function([evt]) : evt;
newEvent();
});
$(element).removeAttr(this.name);
}
});
};
这将,并且实际上确实做到了:
<input type="text" name="myinput" id="myinput" onclick="$(this).val('');" value="Enter your name..." />
进入这个:
<input type="text" name="myinput" id="myinput" value="Enter your name..." />
$('#myinput').on('focus', function(){
$('#myinput').val('');
});
我不知道如何不使用 new Function 所以它适用于所有浏览器,我不知道如何制作它,所以我不需要替换它。
任何帮助表示赞赏。