سؤال

أود الحصول على مدخلات من شأنها أن تتغير إلى الحالة العليا في كي اب. لذلك أرفق حدث بسيط على كي اب.

لغة البرمجة

<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();
    }
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top