۱۳۸۹/۱۱/۰۶

يك دست سازي ي و ك دريافتي در صفحات وب


با استفاده از jQuery ، تحت نظر قرار دادن ورودي‌هاي كاربران در تمام فيلدهاي ورودي صفحه كار ساده‌اي است؛ اما جايگزيني مثلا ى فارسي با ي عربي و برعكس درست در لحظه‌ي تايپ آن‌ها كار ساده‌اي نيست و هر مرورگر روش خاص خودش را دارد و بعضي‌ها هم اصلا اجازه‌ي تغيير رخدادهاي رسيده را نمي‌دهند.
اسكريپت زير كار يك دست سازي ي و ك دريافتي در صفحات وب را انجام مي‌دهد (براي مثال اگر كاربر ي تايپ كند به صورت خودكار به ى تبديل مي‌شود):
// <![CDATA[
function substituteCharInFireFox(charCode, e) {
var keyEvt = document.createEvent("KeyboardEvent");
keyEvt.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, charCode);
e.target.dispatchEvent(keyEvt);
e.preventDefault();
}

function substituteCharInChrome(charCode, e) {
//it does not work yet! /*$.browser.webkit*/
//https://bugs.webkit.org/show_bug.cgi?id=16735
var keyEvt = document.createEvent("KeyboardEvent");
keyEvt.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 0, charCode);
e.target.dispatchEvent(keyEvt);
e.preventDefault();
}

function insertAtCaret(myValue, e) {
var obj = e.target;
var startPos = obj.selectionStart;
var endPos = obj.selectionEnd;
var scrollTop = obj.scrollTop;
obj.value = obj.value.substring(0, startPos) + myValue + obj.value.substring(endPos, obj.value.length);
obj.focus();
obj.selectionStart = startPos + myValue.length;
obj.selectionEnd = startPos + myValue.length;
obj.scrollTop = scrollTop;
e.preventDefault();
}

$(document).ready(function () {
$(document).keypress(function (e) {

var keyCode = e.keyCode ? e.keyCode : e.which;
var arabicYeCharCode = 1610;
var persianYeCharCode = 1740;
var arabicKeCharCode = 1603;
var persianKeCharCode = 1705;

if ($.browser.msie) {
switch (keyCode) {
case arabicYeCharCode:
event.keyCode = persianYeCharCode;
break;
case arabicKeCharCode:
event.keyCode = persianKeCharCode;
break;
}
}
else if ($.browser.mozilla) {
switch (keyCode) {
case arabicYeCharCode:
substituteCharInFireFox(persianYeCharCode, e);
break;
case arabicKeCharCode:
substituteCharInFireFox(persianKeCharCode, e);
break;
}
}
else {
switch (keyCode) {
case arabicYeCharCode:
insertAtCaret(String.fromCharCode(persianYeCharCode), e);
break;
case arabicKeCharCode:
insertAtCaret(String.fromCharCode(persianKeCharCode), e);
break;
}
}
});
});
// ]]>
تابع substituteCharInChrome قرار است در نگارش‌هاي آتي گوگل كروم كار كند! كروم فعلا هر نوع شبيه سازي فشرده شدن كليدهاي صفحه كليد را به صفر ترجمه مي‌كند. به همين جهت از روش insertAtCaret در مورد آن استفاده شد. هر دو تابع substituteChar ذكر شده در مورد فايرفاكس و كروم و يا روش ساده IE (با توجه به اينكه keyCode در IE فقط خواندني نيست)، با اپرا كار نمي‌كنند!

  • دريافت اين اسكريپت: (+)
  • نسخه‌ي فشرده شده آن: (+)
  • يك پروژه‌ي ساده ASP.NET نمونه در مورد استفاده از آن: (+)

اين اسكريپت با IE، فايرفاكس، اپرا ، كروم گوگل و Safari شركت اپل سازگار است و تفاوتي هم نمي‌كند كه در يك html ساده استفاده شود يا در صفحات ASP ، PHP ، ASP.NET ، JSP يا هر چي!


مطالب مشابه: