مشكلة كبيرة المشكلة
-
19-09-2019 - |
سؤال
أود الحصول على مدخلات من شأنها أن تتغير إلى الحالة العليا في كي اب. لذلك أرفق حدث بسيط على كي اب.
لغة البرمجة
<input id="test"/>
جافا سكريبت (مع جيس)
$("#test").keyup(function(){
this.value = this.value.toUpperCase();
});
لكنني وجدت أنه في Chrome و IE، عند دفع السهم الأيسر، يتحرك المؤشر تلقائيا إلى النهاية. لاحظت أنه يجب علي اكتشاف ما إذا كان الإدخال حرفا فقط. يجب أن أستخدم نطاق KeyCode أو RegexP للكشف؟
مثال: http://jsbin.com/omope3.
المحلول
أو يمكنك استخدام ما يلي (ربما هذا أسرع وأكثر أناقة):
<input style="text-transform: uppercase" type='text'></input>
ولكن هذا يرسل القيمة المكتوبة التي تمت كتابتها مرة أخرى في بيانات النموذج، لذلك استخدم أحد الإجراءات التالية لتخزينها كصفات كافة في قاعدة البيانات:
MySQL: UPPER(str)
بي أتش بي: strtoupper()
نصائح أخرى
حل آخر، إذا كنت تستخدم تحويل النص: الأحرف الكبيرة؛ CSS الخاصية:
<input id='test' style='text-transform: uppercase;' type='text'></input>
ومع jQuery تساعدك على اختيار حدث طمس:
$("#test").blur(function(){
this.value = this.value.toUpperCase();
});
مع هذا الحل، ليس لديك إلى أعلى حقول قاعدة البيانات، يمكنك استخدام المؤشر للحركة ويمكن للمستخدم إدراج / إعادة كتابة النص في حقل الإدخال.
استخدم هذا:
<input onkeyup="MakeMeUpper(this)" type="text"/>
وفي جزء رمز JS الخاص بك وضعت:
function MakeMeUpper(f, e){
var actualValue = f.value;
var upperValue = f.value.toUpperCase();
if( actValue != upperValue){
f.value = upperValue;
}
}
لن يقوم هذا الرمز بتغيير النص إذا دخل المستخدم شيئا غير نصي (السهم الأيسر أو الأيمن).
نعم، يبدو أن بعض المتصفحات تحريك المؤشر إلى النهاية عند تحديث القيمة. يمكنك القيام بذلك:
$("#test").keyup(function(){
var upper = this.value.toUpperCase();
if (this.value != upper)
this.value = upper;
});
والتي لن تغير القيمة فقط إذا كان يجب تغييرها. ومع ذلك، لا يزال ذلك يتركك مع المشكلة إذا كتبت abd
, ، تحرك اليسار، ضرب c
تحصل abcd
, ، ستظل المؤشر يتحرك إلى النهاية.
جافا سكريبت (مع جيس)
$("#test").keyup(function(){
$(this).val($(this).val().toUpperCase());
});
var str = $(this).val();
if (evt.keyCode != 37 && evt.keyCode != 39)
{
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
return letter.toUpperCase();
});
$(this).val(str);
}
ربما تريد أن ننظر إلى Keycode في وظيفة Keyup الخاصة بك.
var UP_ARROW = 38,
DOWN_ARROW = 40;
$('#test').keyup(function(evt){
if (evt.keyCode == UP_ARROW)
{
this.value = this.value.toUpperCase();
}
if (evt.keyCode == DOWN_ARROW)
{
this.value = this.value.toLowerCase();
}
});