2017-03-22 80 views
1

我有一個函數可以做一個簡單的驗證,如果每個輸入文本都是empyt,會彈出一個警告,程序將停止。點擊按鈕後,功能將啓動。我正準備通過事件,但不知何故event.PreventDefault()不起作用,所以仍然訪問服務器端代碼。 下面是做簡單驗證的功能。event.prevendefault()不能在具有each()函數的函數中工作

var checkRequired = function(event)   
    $('.box-load .requir').each(function(index,item) { 
    var index = $(item).data('index'); 
    if(index === 'text') { 
     if ($(item).val() == "") { 
     $(this).focus(); 
     alert('Please input the required parameter'); 
     event.preventDefault(); 
     } 
    } 
    }); 
} 

對於觸發我用這個代碼的功能:

$(document).on('click','.box-load .btn-save', function(event) { 
event.preventDefault(); 
checkRequired(event); 

貝婁的checkRequired(),我會做一個Ajax請求。我想要的是,如果其中一個輸入文本爲空,則該事件停止。但是有了這些代碼,就無法運行。任何建議?

在此先感謝。

+0

修改你的'checkRequired()'返回一個布爾值,然後在你的點擊處理程序中測試返回值,並且只有在Ajax工作時才執行。在'checkRequired()'內有'event.preventDefault()'沒有意義,因爲你已經在你的點擊處理程序中調用了'event.preventDefault()',而'.preventDefault()'也沒有任何關係通過停止Ajax代碼,它只會阻止點擊按鈕的默認(非JS)行爲。 – nnnnnn

+0

看起來像你的按鈕是種提交按鈕。因此,第一個'event.preventDefault'應該可以工作,如何知道服務器端代碼是否由於表單提交而運行,那麼肯定會出現一些奇怪的現象。 –

回答

0

如果您致電event.preventDefault(),則不會觸發該事件的默認操作。

$(document).on('click','.box-load .btn-save', function(event) 
{  
    checkRequired(event); 
    event.preventDefault(); 

event.preventDefault()應該在for循環之外。

var checkRequired = function(event)  
{  
     $('.box-load .requir').each(function(index,item) { 
     var index = $(item).data('index'); 
     if(index === 'text') { 
      if ($(item).val() == "") { 
      $(this).focus(); 
      alert('Please input the required parameter'); 
      } 
     } 
     }); 
event.preventDefault(); 
} 
+0

@nnnnnn謝謝你的建議,現在正在像你所告訴的那樣工作。非常感謝, –

+0

我很高興聽到它可以幫助你。如果它對你有幫助,你可以接受這個答案。 –

0

event.preventDefault()會停止默認動作,不會停止您的函數調用。如果你沒有專門從你的函數return,它會繼續並啓動ajax。