سؤال

أنا أستخدم PHP لتمرير نموذج تسجيل الدخول عند الاقتضاء، وهنا رمز:

$htmlForm = '<form id="frmlogin">'.'<label>';
switch(LOGIN_METHOD)
{
    case 'both':
        $htmlForm .= $ACL_LANG['USERNAME'].'/'.$ACL_LANG['EMAIL'];
        break;
    case 'email':
        $htmlForm .= $ACL_LANG['EMAIL'];
        break;
    default:
        $htmlForm .= $ACL_LANG['USERNAME'];
        break;
}                       

$htmlForm .= ':</label>'.
             '<input type="text" name="u" id="u" class="textfield" />'.
             '<label>'.$ACL_LANG['PASSWORD'].'</label>'.
             '<input type="password" name="p" id="p" class="textfield" />'.
             '<center><input type="submit" name="btn" id="btn" class="buttonfield" value="Sign in to extranet" /></center>'.
             '</form>';

return $htmlForm;

المشكلة هي أنه عندما يدخل المستخدم المستخدم في IE8، لا يقدم النموذج، ويتم إجبار المستخدم على الضغط على زر إرسال.

كيف يمكنني تصحيح هذا؟

هل كانت مفيدة؟

المحلول

إذا كانت هذه مشكلة حقيقية ولا يمكنك العثور على حل آخر، فيمكنك دائما القيام بذلك onkeypress حدث للنموذج والتحقق مما إذا كان يدخل تم الضغط على المفتاح.

تحرير: إليك الرمز الصحيح وفقا لإجابة الجهاز:

$htmlForm .= ':<form><label>'.$ACL_LANG['USERNAME'].'</label>'.
                                     '<input type="text" name="u" id="u" class="textfield" />'.
                                     '<label>'.$ACL_LANG['PASSWORD'].'</label>'.
                                     '<input type="password" name="p" id="p" class="textfield" />'.
                                     '<center><input type="submit" name="btn" id="btn" class="buttonfield" value="Sign in to extranet" /></center>'.
                                     '</form>';

تحرير 2: HTML صالح. يحاول هذه:

function checkEnter(e) { //e is event object passed from function invocation
    var characterCode //literal character code will be stored in this variable

    if (e && e.which) { //if which property of event object is supported (NN4)
        e = e
        characterCode = e.which //character code is contained in NN4's which property
    }
    else {
        e = event
        characterCode = e.keyCode //character code is contained in IE's keyCode property
    }

    if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
        document.forms[0].submit() //submit the form
        return false
    }
    else {
        return true
    }
}

نصائح أخرى

شاهد أيضا لهذا المرح علة المرح:

لقد تعلمت الطريقة الصعبة أن يكون النموذج الخاص بك display:none في تحميل الصفحة، حتى لو قمت بإظهار ذلك لاحقا مع JavaScript، فلن يتم إرسال IE8 إلى Enter. ومع ذلك، إذا لم تكن مخفية في تحميل الصفحة، وقمت بتعيينه display:none بعد، مثل ondomready، ثم يعمل! ماهذا الهراء

مزيد من التفاصيل والحل الحل البديل هنا: http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter.

محاكاة نقرة

إليك كيف أفعل ذلك في جيس.

// Recreating normal browser behavior in Javascript. Thank you, Microsoft.
jQuery.fn.handle_enter_keypress = function() {
  if ($.browser.msie){
    $(this).find('input').keypress(function(e){
      // If the key pressed was enter
      if (e.which == '13') {
        $(this).closest('form')
        .find('button[type=submit],input[type=submit]')
        .filter(':first').click();
      }
    });
  }
}

$('form').handle_enter_keypress();

فيما يلي رابط في Microsoft على ذلك قد يلقي بعض الضوء بالنسبة لك.

أخذ قراءة سريعة للربط قد تعتبر بالفعل خطأ يقدم النموذج من المفتاح ENTER، الذي أفترض أنه سيتم إصلاحه بواسطة Microsoft ل IE8.

أي anomale عند استخدام مفتاح ENTER لتقديم نموذج

يحرر:

وقد تمت إزالة هذا الآن ولكن آخر حلقة الوصل تغطيها مرة أخرى (أسفل الصفحة) التي تعرف عليه وشرح الخطأ في مدونة IE في 18 ديسمبر 2008.

هل لديك علامة نموذج الافتتاح الذي تم حذفه للتو من مقتطف التعليمات البرمجية الخاصة بك؟

ال action سمة على form عنصر مطلوب بواسطة مواصفات HTML. ربما سوف تعمل بشكل أفضل.

كنت قادرا على إعادة إنتاج هذا أيضا مع إجراء وطريقة. جردت من جميع التعليمات البرمجية الأخرى على الصفحة ولا يزال يتم إنتاجها. ومع ذلك، فقد رأيت أشكال العمل في IE8 مع العمل = ""

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top