読み取り専用の入力テーブルがあり、これらは DB から取り込まれます。ユーザーは、セルをダブルクリックしてアクティブ化して編集できるようになります。新しいデータを DB に送信するには、ユーザーはボタンを押す必要があります。ユーザーは、別のセルをアクティブにした後に別のセルをダブルクリックすることもできますが、それが私の問題です。フォーカスがボタン以外のものに失われた場合、セルの元の値を置き換えられるようにしたいと考えています。
HTML:
<table>
<tr>
<td><input id="1" type="text" value="Data 1" readonly="readonly"/></td>
<td><input id="2" type="text" value="Data 2" readonly="readonly"/></td>
<td><input id="3" type="text" value="Data 3" readonly="readonly"/></td>
<td><input id="4" type="text" value="Data 4" readonly="readonly"/></td>
</tr>
</table>
<button>Send</button>
JavaScript:
$(document).ready(function(){
var element = null;
$('input').dblclick(function(){
$(this).data("backup",$(this).val())
if(element == null){
$(this).toggleClass("active");
$(this).blur(function(event){
window.setTimeout(function(){
if(!$('button').is(':focus')){
$(this).val($(this).data("backup"));
//alert("button has no focus");
}
},100);
});
$(this).attr('readonly',!$(this).attr('readonly'));
element = $(this);
}
else{
if(element.attr('id') == $(this).attr('id')){
$(this).toggleClass("active");
$(this).attr('readonly',!$(this).attr('readonly'));
element = null;
}
else{
element.toggleClass("active");
element.attr('readonly',!element.attr('readonly'));
$(this).toggleClass("active");
$(this).blur(function(event){
window.setTimeout(function(){
if(!$('button').is(':focus')){
$(this).val($(this).data("backup"));
//alert("button has no focus");
}
},100);
});
$(this).attr('readonly',!$(this).attr('readonly'));
element = $(this);
}
}
});
$('button').click(function(){
var value = $('tr').find('.active');
var data = value.val();
alert(data);
});
});