我希望有人能幫助我解決這個問題。JavaScript - 在光標位置插入字符IE8和IE9
我們的一個網絡系統有一個在線表格來提交會議的科學論文。在那裏我們有一個下拉菜單來插入特殊字符。每個客戶和發佈商的特殊字符都有所不同,所以我們必須這樣做。
我們面臨的問題是在IE8和IE9中,所有其他瀏覽器都正常工作。
在這兩個瀏覽器中的任何一個瀏覽器中,如果我們使用下拉菜單插入特殊字符,它會將其添加到隨機位置,而不是將該字符插入到光標位置。
我創建了一個jsfiddle,但是如果你運行它,它將工作。如果你在本地保存這兩個文件並嘗試在IE8或IE9上運行,它就不會。
這是生成的HTML(網頁獲得從傳統的ASP dinamically產生的,有很多的遺留代碼在這裏)。
<TR>
<TH ALIGN="LEFT" COLSPAN="5" WIDTH="100%">Page 2 of 4 Abstract details:</TH>
</TR>
<TR>
<TD COLSPAN="5">
<HR>
</TD>
</TR>
<TR>
<TH ALIGN="LEFT" COLSPAN="5">Abstract Title (max 150 char):</TH>
</TR>
<TR>
<TD ALIGN="LEFT" COLSPAN="5"></TD>
</TR>
<TR>
<TD COLSPAN="5">
<SELECT NAME="AbstractTitleChar" id="AbstractTitleChar">
<OPTION VALUE="">--- Insert character ---</OPTION>
<OPTION VALUE="<alpha>">α Alpha</OPTION>
<OPTION VALUE="<beta>">β Beta</OPTION>
<OPTION VALUE="<cent>">¢ Cent</OPTION>
<OPTION VALUE="<copyright>">© Copyright</OPTION>
<OPTION VALUE="<dagger>">† Dagger</OPTION>
<OPTION VALUE="<degree>">° Degree</OPTION>
<OPTION VALUE="<delta>">δ Delta</OPTION>
<OPTION VALUE="<delta1>">Δ Delta</OPTION>
<OPTION VALUE="<DoubleDagger>">‡ Double Dagger</OPTION>
<OPTION VALUE="<eacute>">é e-acute accent</OPTION>
<OPTION VALUE="<epsilon>">ε Epsilon</OPTION>
<OPTION VALUE="<gamma>">γ Gamma</OPTION>
<OPTION VALUE="<greater>">> Greater than</OPTION>
<OPTION VALUE="<GreaterThanEqualTo>">≥ Greater Than Equal To</OPTION>
<OPTION VALUE="<less>">< Less than</OPTION>
<OPTION VALUE="<micro>">µ Micro</OPTION>
<OPTION VALUE="<omega>">ω Omega</OPTION>
<OPTION VALUE="<plusminus>">± Plus-Minus</OPTION>
<OPTION VALUE="<pound>">£ Pound</OPTION>
<OPTION VALUE="<registered>">® Registered</OPTION>
<OPTION VALUE="<SectionSign>">§ Section Sign</OPTION>
<OPTION VALUE="<rho>">ρ Small 'P'</OPTION>
<OPTION VALUE="<sum>">∑ Sum</OPTION>
<OPTION VALUE="<sunny>">&sunny sunny</OPTION>
<OPTION VALUE="<trade>">™ Trademark</OPTION>
<OPTION VALUE="<yen>">¥ Yen</OPTION>
</SELECT>
<SELECT NAME="TitleFormatting">
<OPTION VALUE="">--- Insert formatting ---</OPTION>
<OPTION VALUE="<B>">Bold start</OPTION>
<OPTION VALUE="</B>">Bold end</OPTION>
<OPTION VALUE="<I>">Italic start</OPTION>
<OPTION VALUE="</I>">Italic end</OPTION>
<OPTION VALUE="<BR>">Line break</OPTION>
<OPTION VALUE="<P>">New paragraph</OPTION>
<OPTION VALUE="<startsub>">Subscript start</OPTION>
<OPTION VALUE="<endsub>">Subscript end</OPTION>
<OPTION VALUE="<startsup>">Superscript start</OPTION>
<OPTION VALUE="<endsup>">Superscript end</OPTION>
<OPTION VALUE="<U>">Underline start</OPTION>
<OPTION VALUE="</U>">Underline end</OPTION>
</SELECT>
<input type="hidden" name="Max_Title_Char" value="100" />
<input type="hidden" name="Max_Text_Char" value="200" />
<input type="hidden" name="Max_Tables" value="0" />
<input type="hidden" name="Max_Images" value="0" />
<input type="hidden" name="Max_Extra_Text_Char" value="100" />
<BR>
<TEXTAREA CLASS="title" id="AbstractTitle" NAME="Abstract_Title" COLS="80"
ROWS="3">Crap's Title</TEXTAREA>
<BR>Character count
<INPUT TYPE="TEXT" READONLY id="CharCountTitle">
<FONT COLOR="RED"><B>(maximum: 100)</B></FONT>
<INPUT TYPE="BUTTON" CLASS="button" NAME = "countTitle" VALUE="Count"></TD>
</TR>
</TABLE>
這是JavaScript
function insertAtCaret(areaId, text) {
var txtarea = document.getElementById(areaId);
var scrollPos = txtarea.scrollTop;
var strPos = 0;
var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ? "ff" : (document.selection ? "ie" : false));
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart('character', -txtarea.value.length);
strPos = range.text.length;
} else if (br == "ff") strPos = txtarea.selectionStart;
//alert(strPos);
var front = (txtarea.value).substring(0, strPos);
var back = (txtarea.value).substring(strPos, txtarea.value.length);
//alert(txtarea.value.length);
txtarea.value = front + text + back;
strPos = strPos + text.length;
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart('character', -txtarea.value.length);
range.moveEnd('character', 0);
range.select();
} else if (br == "ff") {
txtarea.selectionStart = strPos;
txtarea.selectionEnd = strPos;
txtarea.focus();
}
txtarea.scrollTop = scrollPos;
}
$(document).ready(function() {
$('select#AbstractTitleChar').change(function() {
var insertVal = $(this).val();
var targetVal = $('textarea#AbstractTitle').val();
insertAtCaret('AbstractTitle', insertVal);
});
});
的jsfiddle已經標準化的CSS。下載並將其添加到下載的網站,然後它可能工作。 – PitaJ