لا يوفر الحدث الأصلي GWT السلوك المقصود
سؤال
لديّ أداة نصية حيث أرغب في جعل حدث Enter للتصرف مثل حدث علامة التبويب. لذلك ألتقط الحدث الصحفي الرئيسي وأرفع حدثًا أصليًا في علامة التبويب.
ومع ذلك ، لا ينعكس سلوك علامة التبويب في التطبيق. رمز معالج الأحداث هو
public void onKeyPress(KeyPressEvent event) {
int keyCode = event.getNativeEvent().getKeyCode();
if (keyCode == KeyCodes.KEY_ENTER) {
NativeEvent nativeEvent =
Document.get().
createKeyPressEvent(false,false,false,false,KeyCodes.KEY_TAB );
DomEvent.fireNativeEvent(nativeEvent, this, this.getElement());
}
عندما أستخدم CreateKeyPressevent المهملة مع المزيد من الوسيطة ، فإنه يطلق حدث علامة التبويب ولكن السلوك ليس وفقًا لضغط مفتاح TAB ، وهو الانتقال إلى عنصر واجهة المستخدم التالية. يتغير الرمز الجديد من الكود أعلاه في سطر حدث CreateKeyPress على النحو التالي
NativeEvent nativeEvent =
Document.get().
createKeyPressEvent(false,false,false,false,
KeyCodes.KEY_TAB ,KeyCodes.KEY_TAB);
المحلول
لاحظ أن إطلاق الحدث يدويًا لا يولد الإجراء الافتراضي المرتبط بهذا الحدث. على سبيل المثال ، لا يتسبب إطلاق حدث التركيز يدويًا في استلام العنصر (يجب عليك استخدام طريقة التركيز لذلك) ، فإن إطلاق حدث إرسال يدويًا لا يقدم نموذجًا (استخدم طريقة إرسال) ، وإطلاق الحدث الرئيسي يدويًا. لا تسبب ظهور هذا الحرف في إدخال نص مركّز ، وإطلاق حدث نقرة على الارتباط يدويًا لا يتسبب في تنشيط الرابط ، وما إلى ذلك. في حالة أحداث واجهة المستخدم ، هذا أمر مهم لأسباب أمنية ، لأنه يمنع البرامج النصية من محاكاة إجراءات المستخدم التي تتفاعل مع المتصفح نفسه.
من عند http://www.howtocreate.co.uk/tutorials/javaScript/domevents.