2016-01-09 5 views
0
var form0 = document.forms[0]; 

form0.onsubmit = function(e){ 
    alert("form submitted"); 
    var email = form0.elements["email"].value; 
    var url = "https://bpi.briteverify.com/emails.json?address="+email+"&apikey=my-key&callback=emailResult"; 

    jsonp(url, function(data) { 
     if (data.status != "valid") { 
     e.preventDefault(); 
     alert("INVALID EMAIL"); 
     } 
    }); 
} 

function jsonp(url, callback) { 
    var callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random()); 
    window[callbackName] = function(data) { 
     delete window[callbackName]; 
     document.body.removeChild(script); 
     callback(data); 
    }; 

    var script = document.createElement('script'); 
    script.src = url + (url.indexOf('?') >= 0 ? '&' : '?') + 'callback=' + callbackName; 
    document.body.appendChild(script); 
} 

Это работает в Chrome и Safari, но не в Firefox. Хотя «отправленной формы» предупреждение показано, но ничего после этого.Форма отправляется в любом случае в Firefox

Это вопрос Firefox или я делаю что-то неправильно?

+0

Почему вы звоните ' e.preventDefault() 'в обратном вызове' jsonp() '? Это принадлежит обработчику' submit'. – Andreas

+0

@Andreas, потому что в 'jsonp()' Я знаю, действительно ли письмо верное или нет. То, когда я решаю, для продолжения обработки формы или нет. – 3zzy

+1

Но форма уже отправлена ​​в этот момент времени. Переместите 'e.preventDefault()' в обработчик 'submit' и отправьте форму в t он обратный вызов. – Andreas

ответ

1

Попробуйте этот код

form0.onsubmit = function(e){ 
    alert("form submitted"); 
    var email = form0.elements["email"].value; 
    var url = "https://bpi.briteverify.com/emails.json?address="+email+"&apikey=my-key&callback=emailResult"; 

    jsonp(url, function(data) { 
     if (data.status != "valid") { 
      alert("INVALID EMAIL"); 
     } 
     else 
     { 
      form0.onsubmit = null; 
      form0.submit(); 
     } 
    }); 

    return false; 
} 
Смежные вопросы