سؤال

على .صافي التعليمات البرمجية التي تم إنشاؤها على شكل مع "DefaultButton" تعيين سمة يحتوي على الفقراء جافا سكريبت الذي يسمح وظائف للعمل في أي ولكن ليس في غيرها من المتصفحات (فايرفوكس specifcially).

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

لمزيد من المعلومات عن علة ، قرأته هنا.

وهذا يمكن أن تكون ثابتة في Asp.Net 3.0+ ولكن الحل لا يمكن إنشاء 2.0.

أي أفكار أخف الحل (الإختراق التي لا تبدو مثل هاك =د) ؟ الحل في الرابط أعلاه يخيفني قليلا كما أنه يمكن أن يكون بسهولة آثار جانبية غير مقصودة.

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

المحلول

يمكنني استخدام هذه الوظيفة مقتبس من codesta.[تحرير:نفس واحدة ، أرى أن يخيفك!عفوا.لا يمكن أن تساعدك ثم.]

http://blog.codesta.com/codesta_weblog/2007/12/net-gotchas---p.html.

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

<div onkeypress="return FireDefaultButton(event, '<%= aspButtonID.ClientID %>')">
    (your form goes here)
</div>

وهنا وظيفة.

function FireDefaultButton(event, target) 
{
    // srcElement is for IE
    var element = event.target || event.srcElement;

    if (13 == event.keyCode && !(element && "textarea" == element.tagName.toLowerCase())) 
    {
        var defaultButton;
        defaultButton = document.getElementById(target);

        if (defaultButton && "undefined" != typeof defaultButton.click) 
        {
            defaultButton.click();
            event.cancelBubble = true;
            if (event.stopPropagation) 
                event.stopPropagation();
            return false;
        }
    }
    return true;
}

نصائح أخرى

يبدو أن إصلاح codesta.com أن هاربو الرابط لم يعد ضروريا لأن إصلاح الحدث.srcElement لا integrade في ASP.NET 3.5.تنفيذ DefaultButton لا يزال لدينا بعض المشاكل ، لأنه هو اصطياد مفتاح Enter الصحافة في الكثير من الحالات.على سبيل المثال:إذا قمت بتنشيط زر في النموذج باستخدام علامة التبويب الضغط على Enter يجب أن انقر على زر تقديم النموذج.

تشمل ما يلي شفرة جافا سكريبت في الجزء السفلي من ASP.NET صفحة ويب لجعل إدخال تتصرف على النحو الذي ينبغي.

// Fixes ASP.NET's behavior of default button by testing for more controls
// than just textarea where the event should not be caugt by the DefaultButton
// action. This method has to override ASP.NET's WebForm_FireDefaultButton, so
// it has to included at the bottom of the page.
function WebForm_FireDefaultButton(event, target) {
  if (event.keyCode == 13) {
    var src = event.srcElement || event.target;
    if (!(
      src
      &&
      (
        src.tagName.toLowerCase() == "textarea"
        || src.tagName.toLowerCase() == "a"
        ||
        (
          src.tagName.toLowerCase() == "input"
          &&
          (
            src.getAttribute("type").toLowerCase() == "submit"
            || src.getAttribute("type").toLowerCase() == "button"
            || src.getAttribute("type").toLowerCase() == "reset"
          )
        )
        || src.tagName.toLowerCase() == "option"
        || src.tagName.toLowerCase() == "select"
      ) 
    )) {
      var defaultButton;
      if (__nonMSDOMBrowser) {
        defaultButton = document.getElementById(target);
      }
      else {
        defaultButton = document.all[target];
      }
      if (defaultButton && typeof (defaultButton.click) != "undefined") {
        defaultButton.click();
        event.cancelBubble = true;
        if (event.stopPropagation) event.stopPropagation();
        return false;
      }
    }
  }
  return true;
}

عن هذه المسألة بالذات ، والسبب هو لأن جافا سكريبت التي تم إنشاؤها بواسطة ASP.NET 2.0 لديه بعض IE فقط التدوين:هذا الحدث.srcElement لا تلتقطها في فايرفوكس (استخدام الحدث.الهدف بدلا من ذلك):

function WebForm_FireDefaultButton(event, target) {
if (!__defaultFired && event.keyCode == 13 && !(event.srcElement && 
(event.srcElement.tagName.toLowerCase() == "textarea"))) {
var defaultButton;
if (__nonMSDOMBrowser) {
defaultButton = document.getElementById(target);
}
else {
defaultButton = document.all[target];
}
if (defaultButton && typeof(defaultButton.click) != 
"undefined") {
__defaultFired = true;
defaultButton.click();
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
return true;
}

إذا قمنا بتغيير الأولى 2 الخطوط:

function WebForm_FireDefaultButton(event, target) {
var element = event.target || event.srcElement;
if (!__defaultFired && event.keyCode == 13 && !(element && 
(element.tagName.toLowerCase() == "textarea"))) {

وضع تغيير التعليمات البرمجية في ملف ومن ثم القيام

protected void Page_Load(object sender, EventArgs e)
{
ClientScript.RegisterClientScriptInclude("js1", "JScript.js");
}

ثم أنه سوف يعمل على كل من إنترنت إكسبلورر وفايرفوكس.

المصدر:

http://www.velocityreviews.com/forums/t367383-formdefaultbutton-behaves-incorrectly.html

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