JQuery Live PreventDefault فشل في عناصر الإدخال
-
28-09-2019 - |
سؤال
لدي مقتطف الكود التالي:
$('#messages input').live('keydown', function(e){
if(e.keyCode == 13) {
alert($(this).attr('value'));
e.preventDefault();
return false;
}
});
من الواضح أن "إدخال #Message" عبارة عن مجموعة من عناصر نص الإدخال. أرغب في التقاط مفتاح "Enter" ومنعه من تحديث الصفحة. ومع ذلك ، فإنه يفشل في كل مرة. التنبيه يعمل بشكل جيد ، ولكن يبدو أن PreventDefault () لا يعمل.
هل لدي احد اى افكار؟
يحرر: كان يجب أن أذكر أنني أعمل في ASP.NET ، وبين عنصر النموذج. إن إزالته من عنصر النموذج يحل المشكلة ، لكنني أود أن أعرف لماذا لا يعمل Prevefault ().
المحلول 2
ومن المفارقات أن التنبيه نفسه هو الذي كان يسبب المشكلة.
AFAICT ، سوف يوقف التنبيه تنفيذ JavaScript قبل أن يصدر مفعول PreventDefault () ، لكن المتصفح واصل معالجة ضغط المفاتيح ، مما يؤدي إلى تقديم النموذج.
غريب ، ولكن هناك لديك.
نصائح أخرى
قد تحاول
e.stopPropagation()
$('#form_deal_step1').live('submit',function(){
$('.column .column_child select').not(':hidden').each(function(ev){
if($(this).val()=='?')
{
alert('Please select the ages of each child.');
ev.preventDefault();
return false;
}
});
})
var age_selected=1;
$('.column .column_child select').not(':hidden').each(function(){
if($(this).val()=='?')
{
age_selected=0;
}
});
if(age_selected==0)
{
alert('Please select the ages of each child.');
return false;
}
أعتقد أنه يتم تقديم النماذج على keypress
, ، ليس على keydown
. محاولة
$('#messages input').live('keypress', function(e){
if(e.keyCode == 13) {
alert($(this).attr('value'));
e.preventDefault();
return false;
}
});
بقدر ما أدرك أن تحديث الصفحة هو وظيفة افتراضية للنموذج وليس زر الإدخال ، وبالتالي يجب أن تمنع الافتراضي في النموذج بدلاً من الإدخال.
شيء على غرار:
$('#target').submit(function() {
return false;
});