开发者问题收集

e.preventDefault 不起作用 2

2014-02-14
151

有人能帮我找出为什么这个脚本不起作用吗?点击提交按钮后,我的表单仍在提交中。

这是代码:

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());
});

点击提交后没有显示任何警报。任何帮助都将不胜感激。

问候,约翰

3个回答

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

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 进行调试时,可以看到它。

还请注意 Aksu 的回答:

You have specified the submitadd variable inside the event. You must move it outside to get event handler fire, otherwise the variable isn't defined, and the code doesn't work.

AfromanJ
2014-02-14

您已在事件内部指定 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');
   ...
aksu
2014-02-14

将此:

 submitadd.submit(function(e){     

更改为:

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

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


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

     var submitadd = jQuery('#submitadd')
     submitadd.submit(function(e){ 
Jai
2014-02-14