نموذج التماس/JSF يرسل زر التشغيل عند النقر على الحدث
سؤال
لدي نموذج بحث مع منشئ الاستعلام.يتم تفعيل المنشئ بواسطة زر.شيء من هذا القبيل
<h:form id="search_form">
<h:outputLabel for="expression" value="Expression"/>
<h:inputText id="expression" required="true" value="#{searcher.expression}"/>
<button onclick="openBuilder(); return false;">Open Builder</button>
<h:commandButton value="Search" action="#{searcher.search}"/>
</h:form>
والنتيجة هي HTML الذي يحتوي على كل من ملف <button/>
و <input type="submit"/>
في التشكيل.إذا قام المستخدم بإدخال سلسلة في حقل التعبير وضغط على مفتاح الإدخال بدلاً من النقر فوق زر الإرسال، فسيتم عرض منشئ الاستعلام عندما يكون السلوك المتوقع هو إرسال البحث.ما يعطي؟
المحلول
من المفترض أن يتم استخدام زر في نموذج HTML لإرسال النموذج.قم بتغيير الزر إلى نوع الإدخال = "زر" ويجب إصلاحه.
وبدلاً من ذلك، أضف type="button" إلى عنصر الزر.
نصائح أخرى
كأول مرة، قم بإعطاء معرف لزر البحث.بعد ذلك، في مربع النص، يمكنك اعتراض حدث العميل عند الضغط على الزر لأسفل, ، مع وظيفة (جافا سكريبت) مثل هذا:
function KeyDownHandler(event)
{
// process only the Enter key
if (event.keyCode == 13)
{
// cancel the default submit
event.returnValue=false;
event.cancel = true;
// submit the form by programmatically clicking the specified button
document.getElementById('searchButtonId').click();
}
}
آمل أن أساعدك.
إذا كان هناك حقل إدخال واحد داخل النموذج، تقوم العديد من المتصفحات بإرسال النماذج تلقائيًا عند الضغط على مفتاح الإدخال.
يحاول
- أضف حقل إدخال آخر.قم بإخفائه بتصميمه بحيث لا يكون مرئيًا.(على سبيل المثال،
<input type="text" name="bogusField" style="display: none;" />
- قم بحظر سلوك إرسال نموذج مفتاح الإدخال داخل معالج أحداث JavaScript (على سبيل المثال، هنا أو هنا).والأفضل من ذلك، استخدام مجموعة أدوات واجهة المستخدم الرسومية التي قد تساعد في هذا (على سبيل المثال، GWT)