سؤال

ASP.NET 2.0 ، اختبار في FF3 و IE7.

عندما أضغط على زر "Enter" من مربع نص ، يتم إطلاق حدث "OnClick" المقابل لأول ImageButton في الصفحة. إذا قمت بإزالة زر الصورة هذا ، فإنه يطلق حدث ImageButton Onclick التالي على الصفحة.

من وحدة التحكم في Firebug ، إذا استخدمت JavaScript لتقديم النموذج ، فلن يحدث هذا. ولكن لأي سبب من الأسباب ، فإن الدخول من مربع النص يؤدي إلى حدوث حدث Imagebutton غير ذي صلة.

وجدت هذا السؤال التي كانت لديها مشكلة مماثلة ، ومع ذلك فإن الإجابة المقترحة لهذا الحل لا تعمل لأن ImageButtons لا تحتوي على خاصية "usebmitbehavior" عليها.

لا أفهم سبب إطلاق هذا الحدث. إذا نظرت إلى الطلب.

لماذا هذا؟ أفترض أنه يمكنني اكتشاف "إدخال" مكابس المفاتيح من مربعات النص هذه مع JavaScript ، لكن تجربتي في الماضي هي أن هذا السلوك متغير للغاية بين المتصفحات. أي اقتراحات؟

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

المحلول

يمكنك محاولة إعداد زر افتراضي في لوحة ASP أو في النموذج الخاص بك. سيتيح لك ذلك التحكم في ما يحدث عندما يضرب المستخدم مفتاح Enter.

نصائح أخرى

هذا حل أكثر أناقة

<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (event.keyCode!=13);" > </asp:TextBox>

اقرأ المنشور بأكمله هنا

أواجه نفس المشكلة في مشروعي.

هذه المسألة ناتجة عن ASP.NET دائماً سوف نفترض أن العنصر الأول يرث من IButton الواجهة (الزر و ImageButton) هو الزر الافتراضي من الصفحة.

hipotectivey ، إذا كنت تستخدم LinkButton بدلاً من الزر أو ImageButton ، يتم حل هذه المشكلة.

يمكنك العثور على مزيد من المعلومات هنا على MSDN.

يمكنك تعطيل مفتاح Enter من الضغط عليه ، بحيث يتعين على المستخدم النقر على ImageButtons. ما عليك سوى الصق هذه كتلة JavaScript على صفحتك:

<script type="text/javascript">
function stopRKey(evt) { 
  var evt = (evt) ? evt : ((event) ? event : null); 
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 
}
document.onkeypress = stopRKey;
</script>

في الآونة الأخيرة ، كنت أفعل المزيد على العميل من خلال خدمات الويب وأعلى عدد من عمليات البريد. من خلال تحريك أدوات التحكم الخاصة بي خارج عنصر النموذج (أو التخلص منه تمامًا) ، فإن المشكلة تختفي. يتم إدراجه افتراضيًا على صفحات ASPX ، لكنه لم يحدث لي حتى وقت قريب لا أحتاجه في الكثير مما أقوم به.

إنه السلوك الافتراضي لزر إدخال اضغط في منطقة غير نصية لإعادة نشر نموذج. سيكون عليك التعامل معها في طريقة JavaScript لإيقاف Postback.

ستحتاج فقط إلى التحقق من window.event.keycode الخاصية لمعرفة ما إذا كانت تساوي 13. إذا كان ذلك ، أعد تعيينها إلى 0.

function KeyPress()
  {
     if (window.event.keyCode == 13)
        {
           window.event.keyCode = 0;
        }
  }

أفترض أنه يمكنني اكتشاف "إدخال" مفاتيح مفتاح من مربعات النص هذه مع JavaScript

هذا ما فعلته للتغلب على هذا السلوك ويعمل بشكل رائع في IE7 و FF3. انها مجرد غير طبيعية قليلا.

هنا exemple عام:

    function TextBox1_KeyDown(sender, e)
    {
    var key;
        if(window.event)
            key = window.event.keyCode; //IE
        else
            key = e.which; //firefox
        if(key == 13 && $("#TextBox1").val() != "")
        {
            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("TextBox1", "", true, "", "", false, true));
        }
        return (key != 13);
    }

لقد استخدمت webform_dopostbackwithoptions لأنني كنت بحاجة إلى المدققين للتشغيل. خلاف ذلك ، قد ترغب في استخدام __dopostback.

فيما يلي "النماذج الأولية":

function __doPostBack(eventTarget, eventArgument)

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
{
    this.eventTarget = eventTarget;
    this.eventArgument = eventArgument;
    this.validation = validation;
    this.validationGroup = validationGroup;
    this.actionUrl = actionUrl;
    this.trackFocus = trackFocus;
    this.clientSubmit = clientSubmit;
}

function WebForm_DoPostBackWithOptions(options)

أتمنى أن يساعد ذلك.

ملاحظة: لقد استخدمت jQuery هنا ولكن get $ سيكون هو نفسه.

إليك الحل الأنيق الذي وجدته ، في حال كان لدى أي شخص آخر هذه المشكلة (في حالة عدم عمل كل الحلول الأخرى من أجلك ، لأنها لم تعمل من أجلي):

<asp:UpdatePanel runat="server">
<ContentTemplate>
    <asp:Panel runat="server" DefaultButton="doNothingButton">
        <ul id="shopping-list-ul">
        </ul>
        <asp:Button CssClass="invisible" runat="server" ID="doNothingButton" OnClientClick="return false;" />
    </asp:Panel>
</ContentTemplate>

كان مربع النص Iself داخل UL (تم إنشاؤه بواسطة JavaScript).
سيؤدي الضغط على Enter إلى تشغيل "DonothingButton" ، والذي سيعود خطأ إلى جانب العميل ، مما لا يتسبب في عدم وجود Postback على الإطلاق!

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