hakan648
جمعه 16 خرداد 1393, 10:55 صبح
var isirikey = [
0x0020, 0x0021, 0x061B, 0x066B, 0xFDFC, 0x066A, 0x060C, 0x06AF,
0x0029, 0x0028, 0x002A, 0x002B, 0x0648, 0x002D, 0x002E, 0x002F,
0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7,
0x06F8, 0x06F9, 0x003A, 0x06A9, 0x003E, 0x003D, 0x003C, 0x061F,
0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,
0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x0654, 0x005D,
0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0670, 0x064C,
0x0653, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x06CC, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E
];
for (var i = 32; i < isirikey.length + 32; i++) {
console.log(
//en
String.fromCharCode(i),
//fa
String.fromCharCode(isirikey[i - 32]));
}
Test
http://jsfiddle.net/DevJv/
bftarane
جمعه 16 خرداد 1393, 12:41 عصر
من که نتونستم نتیجه ای در jsfiddle ببینم
ولی فکر کنم طبق کد این کدها برای انگلیسی باشن درسته؟
0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,
0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x0654, 0x005D,
0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0670, 0x064C,
0x0653, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x06CC, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E
اینها که نه کدهای اسکی هستند نه یونیکد. از کجا اینا به دست می یان؟
من فایل kblayout.js رو هم به صورت زیر تغییر دادم
keyboardLayout['fa'] = [
0x0020, 0x0021, 0x061b, 0x066b, 0xfdfc, 0x066a, 0x060c, 0x06af, 0x0029, 0x0028, 0x002a, 0x002b, 0x0648, 0x002d, 0x002e, 0x002f,
0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06f6, 0x06f7, 0x06f8, 0x06f9, 0x003a, 0x06a9, 0x003e, 0x003d, 0x003c, 0x061f,
0x066c, 0x0624, 0x200c, 0x0698, 0x064a, 0x064d, 0x0625, 0x0623, 0x0622, 0x0651, 0x0629, 0x00bb, 0x00ab, 0x0621, 0x0654, 0x005d,
0x005b, 0x0652, 0x064b, 0x0626, 0x064f, 0x064e, 0x0670, 0x064c, 0x0653, 0x0650, 0x0643, 0x062c, 0x005c, 0x0686, 0x00d7, 0x0640,
0x200d, 0x0634, 0x0630, 0x0632, 0x06cc, 0x062b, 0x0628, 0x0644, 0x0627, 0x0647, 0x062a, 0x0646, 0x0645, 0x067e, 0x062f, 0x062e,
0x062d, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635, 0x0637, 0x063a, 0x0638, 0x007d, 0x007c, 0x007b, 0x00f7, 0x200c
];
langCycle.push({lang: 'fa', direction: 'rtl'});
keyboardLayout['en'] = [
0x066C, 0x0624, 0x200C, 0x0698, 0x064A, 0x064D, 0x0625, 0x0623,
0x0622, 0x0651, 0x0629, 0x00BB, 0x00AB, 0x0621, 0x0654, 0x005D,
0x005B, 0x0652, 0x064B, 0x0626, 0x064F, 0x064E, 0x0670, 0x064C,
0x0653, 0x0650, 0x0643, 0x062C, 0x005C, 0x0686, 0x00D7, 0x0640,
0x200D, 0x0634, 0x0630, 0x0632, 0x06CC, 0x062B, 0x0628, 0x0644,
0x0627, 0x0647, 0x062A, 0x0646, 0x0645, 0x067E, 0x062F, 0x062E,
0x062D, 0x0636, 0x0642, 0x0633, 0x0641, 0x0639, 0x0631, 0x0635,
0x0637, 0x063A, 0x0638, 0x007D, 0x007C, 0x007B, 0x007E
];
langCycle.push({ lang: 'en', direction: 'ltr' });
و به تکست باکس خاصیت lang="en" رو اضافه کردم ولی جواب نمی ده. لطفاً بیشتر راهنمایی کنید.
hakan648
جمعه 16 خرداد 1393, 18:42 عصر
از پاسخ قبلی تا الان کد کتابخانه ای که لینک دادید رو بررسی کردم و با دانش اندکی که دارم یک کدی نوشتم که تقریبا صحیح عمل میکند.
روش کار به این صورت است که زمانی که کلیدی فشرده شد، کد اون کلید ذخیره میشه و در هر بار رویداد onkeypress ( زمانی که یک حرف به المنت اضافه میشه )، اگر حرف وارد شده اسکی نبود (چیزی جز انگلیسی)، از شماره کلیدی که در رویداد قبلی دریافت کردیم برای محاسبه حرف مورد نظر استفاده میکنیم. در حالی که اگر حرف وارد شده اسکی بود، همون حرف به المنت اضافه میشه.
دلیل دریافت کد از رویداد onkeydown هم بخاطر این است که در رویداد onkeypress به شماره کلید فشرده شده دسترسی نداریم.
توجه کنید که شماره کلید (keyCode) با شماره کرکتر (charCode) متفاوت است. charCode به کد حرف وارد شده اشاره دارد و به همین دلیل نمیشه از طریق اون حرف انگلیسی رو بدست آورد ( با فرض اینکه ممکنه کاربر به هر زبونی متن بنویسه )
اما با بدست آوردن شماره کلید، براحتی میشه حرف معادل اون رو از روی کیبورد ( به هر زبونی ) بدست آورد.
برای بدست آوردن کد معادل یک کلید، از این صفحه میتونید استفاده کنید:
Javascript Char Codes (Key Codes) - Cambia Research (http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes)
کد زیر تقریبا برای همه ی حروف بجز تعداد کمی از آن ها صحیح کار میکند و بجز چند خط، شباهت دیگری با کتابخانه ای که اول معرفی کردید ندارد.
<textarea rows="15" cols="40" id="testtextarea"></textarea>
var textBox = document.getElementById("testtextarea");
var keyCode,
isDown;
textBox.onkeydown = function (e) {
keyCode = e.keyCode;
isDown = true;
};
textBox.onkeyup = function (e) {
keyCode = null;
isDown = false;
};
textBox.onkeypress = function (e) {
var target = window.event ? e.srcElement : e.target;
var charCode = window.event ? e.keyCode : e.charCode;
console.log("plg ", keyCode, getChar(e), String.fromCharCode(getChar(e)));
//Do nothing for ASCII chars
if (charCode < 255)//0x00FF
return;
var finalCharCode = getChar(e);
try {
var newEvent;
// webkit, Chrome
if (/ Chrome\//.test(navigator.appVersion)) {
newEvent = document.createEvent('TextEvent');
newEvent.initTextEvent('textInput', true, true, window, String.fromCharCode(finalCharCode));
// webkit, other
} else if (typeof (e.initKeyboardEvent) != 'undefined') {
newEvent = document.createEvent("KeyboardEvent");
newEvent.initKeyboardEvent("keypress", true, true, window, finalCharCode, 0, false, false, false, false);
newEvent.charCode = finalCharCode;
// Gecko
} else {
newEvent = document.createEvent("KeyEvents");
newEvent.initKeyEvent("keypress", false, true, document.defaultView, false, false, false, false, 0, finalCharCode);
}
if (newEvent.isTrusted != undefined && !newEvent.isTrusted) {
throw "not trusted";
}
target.dispatchEvent(newEvent);
e.preventDefault();
} catch (err) {
try {
if (window.event) {
// Windows
e.keyCode = finalCharCode;
} else {
throw err;
}
} catch (err) {
try {
// Gecko after banning fake key emission (FF 1.0.6 to FF 1.5.0.1)
// Try inserting at cursor position
pnhMozStringInsert(target, String.fromCharCode(finalCharCode));
e.preventDefault();
} catch (err) {
// Everything else, simply add to the end of buffer
target.value += String.fromCharCode(finalCharCode);
e.preventDefault();
}
}
}
};
// Inserts a string at cursor
function pnhMozStringInsert(elt, newtext) {
var posStart = elt.selectionStart;
var posEnd = elt.selectionEnd;
var scrollTop = elt.scrollTop;
var scrollLeft = elt.scrollLeft;
elt.value = elt.value.slice(0, posStart) + newtext + elt.value.slice(posEnd);
var newpos = posStart + newtext.length;
elt.selectionStart = newpos;
elt.selectionEnd = newpos;
elt.scrollTop = scrollTop;
elt.scrollLeft = scrollLeft;
elt.focus();
}
//jQuery.getChar.js
//https://github.com/bpeacock/key-to-charCode
function getChar(e) {
/*** Convert to Char Code ***/
//var code = e.which;
var code = keyCode;
//Ignore Shift Key events & arrows
var ignoredCodes = {
16: true,
37: true,
38: true,
39: true,
40: true,
20: true,
17: true,
18: true,
91: true
};
if (ignoredCodes[code] === true) {
return false;
}
//These are special cases that don't fit the ASCII mapping
var exceptions = {
186: 59, // ;
187: 61, // =
188: 44, // ,
189: 45, // -
190: 46, // .
191: 47, // /
192: 96, // `
219: 91, // [
220: 92, // \
221: 93, // ]
222: 39, // '
//numeric keypad
96: '0'.charCodeAt(0),
97: '1'.charCodeAt(0),
98: '2'.charCodeAt(0),
99: '3'.charCodeAt(0),
100: '4'.charCodeAt(0),
101: '5'.charCodeAt(0),
102: '6'.charCodeAt(0),
103: '7'.charCodeAt(0),
104: '8'.charCodeAt(0),
105: '9'.charCodeAt(0)
};
if (exceptions[code] !== undefined) {
code = exceptions[code];
}
var ch = String.fromCharCode(code);
/*** Handle Shift ***/
if (e.shiftKey) {
var special = {
1: '!',
2: '@',
3: '#',
4: '$',
5: '%',
6: '^',
7: '&',
8: '*',
9: '(',
0: ')',
',': '<',
'.': '>',
'/': '?',
';': ':',
"'": '"',
'[': '{',
']': '}',
'\\': '|',
'`': '~',
'-': '_',
'=': '+'
};
if (special[ch] !== undefined) {
ch = special[ch];
}
}
else {
ch = ch.toLowerCase();
}
return ch.charCodeAt(0);
}
Test
http://jsfiddle.net/4sSkK/1/
در آخر عذر خواهی میکنم اگه جواب کاملی ندادم خدمتتون و تاپیکتون رو شلوغ کردم.
ظاهرا قبلا تو how2learnasp.net کمک بیشتری ازمون برمیومد و شمارو هم اذیت نمیکردیم :)
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.