e.preventDefault不起作用2

时间:2014-02-14 13:45:11

标签: javascript jquery

任何人都可以帮我找出为什么这个脚本不起作用?点击提交按钮后,我的表单仍在提交。

以下是代码:

submitadd.submit(function(e){     

  var submitadd = jQuery('#submitadd'),
      yearofmanufacturing = jQuery('#yearofmanufacturing'),
      price = jQuery('#price'),
      addtext = jQuery('#addtext');

  if(yearofmanufacturing.val()==''){
    jQuery('#yearofmanufacturing').addClass('bordered2');  
    jQuery('#yearofmanufacturing').removeClass('styled_select'); 
    jQuery("#yearofmanufacturing").attr("placeholder", "Εισάγετε Χρονολία").placeholder();
    e.preventDefault();
    return false;
    alert('yearof......enter in the if');  
  } 
  else {
    alert("yearnotempty?");
  }

  if(price.val()=='') {
    jQuery('#price').addClass('bordered2');  
    jQuery('#price').removeClass('styled_select'); 
    jQuery("#price").attr("placeholder", "Εισάγετε τιμή").placeholder();
    e.preventDefault();
    return false;
    alert('price...enter in the if');
  }

  if(addtext.val()==''){
    jQuery('#addtext').addClass('bordered2');  
    jQuery('#addtext').removeClass('styled_select'); 
    jQuery("#addtext").attr("placeholder", "Εισάγετε περιγραφή αγγελίας").placeholder();
    e.preventDefault();
    return false;
    alert('add text...enter in the if');
  }

  alert('addtext = ' +addtext.val());
});

单击提交时,没有任何警报显示。任何帮助都将深表感谢。

注意,约翰

4 个答案:

答案 0 :(得分:1)

为了节省空间,你可以这样做:

<强> JQuery的

jQuery('#submitadd').submit(function(){     

    var checks = [jQuery('#yearofmanufacturing'), 
                  jQuery('#price'), 
                  jQuery('#addtext')];

    for(var i = 0; i < checks.length; i++){
        var x = checks[i];
        if(x.val() == ''){
            x.addClass('bordered2').removeClass('styled_select'); 
            x.prop("placeholder", "Εισάγετε Χρονολογία");
            console.log('Value for ' + x.prop('id') + ' is empty.');

            return false;
        }
        else {
            console.log('Value for ' + x.prop('id') + ' is not empty.');
        }
    }

});

<强> Demo

我已经重写了大部分功能,但它仍然做同样的事情。我已移除e.preventDefault();,而是使用return false;

如果值为空。这也记录到控制台(console.log()),当您使用 F12 进行调试时,这是可见的

注意阿克苏的答案:

  

您已在活动中指定 submitadd 变量。您必须将其移到外面才能触发事件处理程序,否则未定义变量,并且代码不起作用。

答案 1 :(得分:0)

您已在事件中指定了submitadd变量。您必须将其移到外面才能触发事件处理程序,否则未定义变量,并且代码不起作用。

var submitadd = jQuery('#submitadd');

// user fill all fields as it should, so form can be submitted
submitadd.submit(function(e){     

   var  yearofmanufacturing = jQuery('#yearofmanufacturing'),
        price = jQuery('#price'),
        addtext = jQuery('#addtext');
   ...

答案 2 :(得分:0)

改变这个:

 submitadd.submit(function(e){     

到此:

 jQuery('#submitadd').submit(function(e){     

在您的情况下,变量submitadd在声明之前已被使用。


或者您可以在提交前声明:

     var submitadd = jQuery('#submitadd')
     submitadd.submit(function(e){ 

答案 3 :(得分:0)

解决方案:var submitadd = jQuery('#submitadd');移出您的功能!


我会向你推荐一些东西:

  • 使用您的jQuery变量:

    您可以多次编写yearofmanufacturing

  • ,而不是使用jQuery('#yearofmanufacturing')
  • 命名约定:

    如果您要声明jQuery对象,我建议您使用$price之类的变量名,而不是price

  • 不要写无法访问的代码:

    您正在尝试在返回内容后调用alert()。这没有任何意义。

  • 不要滥用alert()来解决调试问题:

    使用console.log()console.debug()console.info()console.warn()获得最佳调试经验。

  • Crossbrowser支持:

    Internet Explorer&lt; = 8不知道.preventDefault().对此类内容感到满意: (e.preventDefault) ? e.preventDefault() : e.returnValue = false;