カーソルが思い通りにならない。
20070830
xoopsで、weblogD3を利用することにしたのですが、これ、何故かフォームへのコードの追加が
カーソル位置ではなく、文末になってしまっており、非常に使いづらく感じておりました。
で、色々と調べ、さんだーさんにも知恵を借りつつ頑張ったところ、javascriptとfirefoxの関係の問題のようで。
xoops.jsとxoopscodes.phpを修正することで、きちんとカーソル位置にBBcodeや顔文字を入れることができるようになりました♪
【xoops.js】
} else {
domobj.value = domobj.value + text;
}
↓
} else if (domobj.selectionStart){
tmpValue = new Array();
posSt = domobj.selectionStart;
posEd = domobj.selectionEnd;
tmpValue[0] = domobj.value.substring(0, posSt);
tmpValue[1] = domobj.value.substring(posEd,domobj.value.length);
domobj.value = tmpValue[0] + text + tmpValue[1];
} else {
domobj.value = domobj.value + text;
}に修正。
var revisedMessage;
var textareaDom = xoopsGetElementById(id);
xoopsInsertText(textareaDom, smilieCode);
textareaDom.focus();
return;
↓
var revisedMessage, pos;
var textareaDom = xoopsGetElementById(id);
if(textareaDom.selectionEnd)
pos = eval(textareaDom.selectionEnd + smilieCode.length);
xoopsInsertText(textareaDom, smilieCode);
textareaDom.focus();
if(pos){
textareaDom.selectionStart = pos;
textareaDom.selectionEnd = pos;
}
return;に。
【xoopscodes.php】
<textarea id='".$textarea_id."' name='".$textarea_id."' cols='$cols' rows='$rows'>".$GLOBALS[$textarea_id]."</textarea>
↓
<textarea id='".$textarea_id."' name='".$textarea_id."' onselect=\"xoopsSavePosition('".$textarea_id."');\" onclick=\"xoopsSavePosition('".$textarea_id."');\" onkeyup=\"xoopsSavePosition('".$textarea_id."');\" cols='$cols' rows='$rows'>".$GLOBALS[$textarea_id]."</textarea>
とりあえずこれで、私のとこでは希望通りの動きになっております。
カーソル位置ではなく、文末になってしまっており、非常に使いづらく感じておりました。
で、色々と調べ、さんだーさんにも知恵を借りつつ頑張ったところ、javascriptとfirefoxの関係の問題のようで。
xoops.jsとxoopscodes.phpを修正することで、きちんとカーソル位置にBBcodeや顔文字を入れることができるようになりました♪
【xoops.js】
} else {
domobj.value = domobj.value + text;
}
↓
} else if (domobj.selectionStart){
tmpValue = new Array();
posSt = domobj.selectionStart;
posEd = domobj.selectionEnd;
tmpValue[0] = domobj.value.substring(0, posSt);
tmpValue[1] = domobj.value.substring(posEd,domobj.value.length);
domobj.value = tmpValue[0] + text + tmpValue[1];
} else {
domobj.value = domobj.value + text;
}に修正。
var revisedMessage;
var textareaDom = xoopsGetElementById(id);
xoopsInsertText(textareaDom, smilieCode);
textareaDom.focus();
return;
↓
var revisedMessage, pos;
var textareaDom = xoopsGetElementById(id);
if(textareaDom.selectionEnd)
pos = eval(textareaDom.selectionEnd + smilieCode.length);
xoopsInsertText(textareaDom, smilieCode);
textareaDom.focus();
if(pos){
textareaDom.selectionStart = pos;
textareaDom.selectionEnd = pos;
}
return;に。
【xoopscodes.php】
<textarea id='".$textarea_id."' name='".$textarea_id."' cols='$cols' rows='$rows'>".$GLOBALS[$textarea_id]."</textarea>
↓
<textarea id='".$textarea_id."' name='".$textarea_id."' onselect=\"xoopsSavePosition('".$textarea_id."');\" onclick=\"xoopsSavePosition('".$textarea_id."');\" onkeyup=\"xoopsSavePosition('".$textarea_id."');\" cols='$cols' rows='$rows'>".$GLOBALS[$textarea_id]."</textarea>
とりあえずこれで、私のとこでは希望通りの動きになっております。