PDA

View Full Version : شناسایی کدهای اسکی extended



ArtCom
سه شنبه 05 دی 1385, 09:54 صبح
سلام من با یه تابع جاوا اسکریپت مقادیر فیلد های ورودی رو فیلتر کردم مثلا یه جا فقط عدد وارد میشه و یه جا فقط حروف الفبا وقتی برنام رو توی IE اجرا میکنم مشکلی نیست ولی توی firefox یا netscape کلیدهای del , Aroowkeys , backspace کار نمیکنند من اومدم قبل از انجام هر کاری گفتم اگر کد کلیدها 8و 127 و ... باشه تابع true برگردونه تا مشکلی پیش نیاد ولی کدها فقط برای 8 که backspace هست درست کار میکنه . فکر میکنم مقادیر کدها رو چون کدهای extended هستند اشتباه میذارم .
الان فقط میخوام مقادیر (کد اسکی) کلید های arrowkeys, del رو میخوام و روش به دست آوردنشون .
با تشکر فراوان

problem
سه شنبه 05 دی 1385, 19:16 عصر
تا شما کدتون رو نگذارید، ما نمی‌تونیم براتون اصلاحش کنیم. به نظر می‌رسه که اگر کدتون رو تغییر بدیم، بهتر باشه تا این که خودمون از صفر بخوایم کد بزنیم.

ArtCom
چهارشنبه 06 دی 1385, 07:04 صبح
دقیقا تابعی که استفاده میکنم اینه. که اگر متغیر xx یک باشه تابع بعدی رو صدا میزنم که اون اجازه ورود فقط عدد رو میده .
من این تابع رو روی onkepress همه فیلدها استفاده میکنم اگر بخوام فقط عدد باشه متغیر آخر رو یک میدم و الا اصلا مقدار دهی نمیکنم.
onkeypress="return handleEnter(this, event,[1])"a
چیزی که من میخوام اینه که اگر keyCode ورودی یکی از کلید های del,beckspace ,arrokeys ها بود قبل از انجام هر کاری true برگردونه.
در ضمن من توی IE مشکل ندارم فقط توی FF,Net مشکل هست.


function handleEnter (field, event,xx)
{
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if(((keyCode > 32 && keyCode < 47) ) || (keyCode > 57 && keyCode < 65) || (keyCode > 90 && keyCode <= 95) || (keyCode > 122 && keyCode < 127))
{
return false;
}
if (keyCode == 13)
{
var i;
for (i = 0; i < field.form.elements.length; i++)
if (field == field.form.elements[i])
break;
i = (i + 1) % field.form.elements.length;
field.form.elements[i].focus();
if(field.form.elements[i].type == 'text')
field.form.elements[i].select(field.form.elements[i].value);
return false;
}

else
{
if(keyCode==0) return true;
if(xx==1)
return noNumbers(event);
return true;
}
}


function noNumbers(e)
{
var keynum;
var keychar;
var numcheck;

if (window.event) {
keynum = e.keyCode;
} else if (e.which) {
keynum = e.which;
}
// Allow Backspace, Delete and Arrowkeys
if (keynum == 8 || keynum == 127 || !keynum) {
return true;
}
numcheck = /\d/;
keychar = String.fromCharCode(keynum);
//if (input.value.length >= maxChars) return false;
return numcheck.test(keychar);
}

problem
چهارشنبه 06 دی 1385, 21:02 عصر
کد شما رو در فایرفاکس ۲ آزمایش کردم. Backspace کار می‌کرد، اما arrow keys و del کار نمی‌کردن.
کلیدهای چهار جهت اصلی کد ۳۷ تا ۴۰ دارن. (جهت اطلاع خواننده‌های بعدی این تایپک: این رو به سادگی با گذاشتن یک (alert(keyCode بعد از سطری که مقدار keyCode رو تعیین می‌کنه و بعد فشردن کلیدهای یاد شده، پیدا کردم.) دکمه del هم که ۴۶ هستش، نهایتاً backspace هم که ۸ بود همون‌طور که می‌دونستید.

من نمی‌دونستم که کد ۴۷ مال کدوم کلیده، برای همین در کدتون اجازه ندادم که کد ۴۷ رد بشه، اما بقیه رو اصلاح کردم.



<script>
function handleEnter (field, event,xx)
{
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
if(((keyCode > 32 && keyCode < 37) ) || (keyCode > 40 && keyCode <46) || keyCode==47 || (keyCode > 57 && keyCode < 65) || (keyCode > 90 && keyCode <= 95) || (keyCode > 122 && keyCode < 127))
{
return false;
}
if (keyCode == 13)
{
var i;
for (i = 0; i < field.form.elements.length; i++)
if (field == field.form.elements[i])
break;
i = (i + 1) % field.form.elements.length;
field.form.elements[i].focus();
if(field.form.elements[i].type == 'text')
field.form.elements[i].select(field.form.elements[i].value);
return false;
}

else
{
if(keyCode==0) return true;
if(xx==1)
return noNumbers(event);
return true;
}
}


function noNumbers(e)
{
var keynum;
var keychar;
var numcheck;

if (window.event) {
keynum = e.keyCode;
} else if (e.which) {
keynum = e.which;
}
// Allow Backspace, Delete and Arrowkeys
if (keynum == 8 || keynum == 127 || !keynum) {
alert('x');
return true;
}
numcheck = /\d/;
keychar = String.fromCharCode(keynum);
//if (input.value.length >= maxChars) return false;
return numcheck.test(keychar);
}
</script>
<input type="text" onkeypress="return handleEnter(this, event,[1])">


فقط حواستون باشه، این تیکه keyNum! باعث شده که کد کار کنه‌ها! اگر این رو بردارید، حتی F5 هم برای refresh کردن کار نمی‌کنه!!

ArtCom
پنج شنبه 07 دی 1385, 06:54 صبح
سلام
ممنون ولی هیچ تغییری ایجاد نشده برای به دست آوردن کدهای اسکی من هم خودم اومدم با چاپ KeyCode اونها رو پیدا کردم ولی مقادیر اونها متفاوتند.

problem
پنج شنبه 07 دی 1385, 10:55 صبح
سلام
کد برای من در فایرفاکس ۲ کار کرد. شما چه نسخه‌ای از فایرفاکس رو داری؟ ضمناً آیا در Error log فایرفاکس (که در ورژن ۱/۵ و ۲ اسمش فرق داره، و در ۲ در منوی Tools به اسم Error Console اومده) خطایی گزارش می‌کنه؟

ArtCom
سه شنبه 19 دی 1385, 11:19 صبح
سلام من از ff ورژن 2.0.0.1 استفاده میکنم و توی error console خطایی گزارش نمیکنه.
یعنی برای شما beckspace و arrowkey ها کار میکنند؟
یه سوال دیگه من چه جوری باید استاندارد سازی کنم که نگران نوع مرورگر کاربر نباشم؟
من کلا از css استفاده میکنم و برای فیلتر کردن ورودی ها از js ولی خروجی در بعضی موارد معدود متفاوته که من دلم میخواد همش رو شناسایی و برطرف کنم.

problem
سه شنبه 19 دی 1385, 13:11 عصر
بله برای من کار می‌کنن! کدی هم که فعلاً بهش رسیدیم استاندارد هست. موارد معدود رو نمی‌فهمم چی هستن، اما در کل، کد برگردونده شده برای هر کلید مستقل از مرورگر هست و به سیستم عامل مربوطه.

ArtCom
سه شنبه 19 دی 1385, 13:16 عصر
ممنون منظورم از موارد معدود مثلا رنگ border در css یا همین عملیات filtering هست البته مثلا توی نمایش iframe هم یه تفاوتهایی بود که با یکم دستکاری درست شد . یا مثلا من یه کار کردم بین فیلدها با enter حرکت کنم ولی اونم یه جاهایی توی ff مشکل داشت .
آخه مشکل اساسیه من اینه که نمیدونم مشکل از کجاست.
در هر صورت ممنون.