سؤال

لدي مقتطف الكود التالي:

$('#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;
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top