誰もが「インラインイベントを使用しないでください」という答えを出す前に、最初に、インラインイベントを使用していないことを最初に言わせてください。他の人がコーディングしたものをクリーンアップしたいだけです。すべてのコード。
そこで、代わりにインライン イベントを 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 を使用しない方法がわからないので、すべてのブラウザーで機能し、作成方法がわからないので、これを置き換える必要はありません。
どんな助けでも大歓迎です。