申し訳ありませんが、その要点を理解するのに苦労しています。私がこれを正しく理解した場合、ユーザーがクリックまたは選択するまで入力フィールドを編集できないようにする必要があります(これは基本的に入力フィールドの動作方法です。選択しない限り値を変更することはできません)。これらの入力フィールドがフォーカスを失った後、読み取り専用に戻る必要があります。
これが事実である場合、あなたは物事を複雑にしすぎています。しかし、それは私の仕事ではありません。これをIMOで行うための最良の方法は、イベントを委任することです。
したがって、純粋なJS、jQueryについて、いくつかのフィドルをまとめました。どちらも完璧にはほど遠いですが、途中で役立つはずです。
通常のJS(ここでフィドル):
var dv = document.getElementById('inputDiv');
if (!dv.addEventListener)
{
dv.attachEvent('onfocusin',switchRO);
dv.attachEvent('onfocusout',switchRO);
}
else
{
dv.addEventListener('focus',switchRO,true);
dv.addEventListener('blur',switchRO,true);
}
function switchRO (e)
{
var self;
e = e || window.event;
self = e.target || e.srcElement;
if (self.tagName.toLowerCase() === 'input')
{
switch (e.type)
{
case 'onfocusin':
case 'focus':
self.removeAttribute('readonly');
break;
default:
self.setAttribute('readonly','readonly');
}
}
return true;
}
jQueryでは、これは次のようになります(jQuery with .on
、jsfiddle here):
$('#inputDiv input').on(
{
focus: function()
{
$(this).removeAttr('readonly');
},
blur: function()
{
$(this).attr('readonly','readonly');
}
});
jQueryと純粋なJSの両方を投稿しました。これは、jQueryの画面の背後で何が起こっているかを知ることが有益で教育的であることがわかったためです。