2016-03-16 69 views
0

我有下面的代碼,回調似乎不能正常工作。我的理解是,如果用戶名未定義或爲空,那麼#username-error div應顯示,並且應將錯誤類添加到添加到用戶名輸入的get中。只有當這一切完成後,警報纔會被解僱。但是,當我在瀏覽器中查看時,錯誤div不顯示,並且警報被觸發。所以顯然,類錯誤正在增加,因此,建議#username-error div具有調用的.show()函數是合理的,但它確實看起來不像它。任何幫助,只要#username-error div出現一次,就可以讓我獲得警報以便觸發。jQuery回調不能正常工作

<script type="text/javascript"> 
 
$(document).ready(function() { 
 
    $("input[name='username']").bind("blur", function() { 
 
     validateUsername(myFunction); 
 
    }); 
 

 
    $("input[type='submit']").bind("click", function() { 
 
     validateUsername(myFunction); 
 
    }); 
 

 
    $("#username-error").hide(); 
 
    $("#username-success").hide(); 
 
}); 
 

 
function myFunction() { 
 
    if ($(".error").length > 0) { 
 
     alert("errors on page"); 
 
     return false; 
 
    } 
 
} 
 

 
function validateUsername(callback) { 
 
    var $username = $("input[name='username']"); 
 
    if (typeof $username.val() === "undefined" || $username.val() === "") { 
 
     $("#username-error").show(); 
 
     $("#username-success").hide(); 
 
     $username.addClass("error"); 
 
    } else { 
 
     $("#username-error").hide(); 
 
     $("#username-success").show(); 
 
     $username.removeClass("error"); 
 
    } 
 
    if (callback) { 
 
     callback(); 
 
    } 
 
} 
 
</script>

+0

你把劇本放在哪裏?它似乎爲我使用CodePen。我的猜測是你的文檔的''標籤?如果是這種情況,那麼它在輸入被解析之前運行,所以綁定調用不能正常工作。使用codepen:http://codepen.io/shigidaMark/pen/oxBzjb。從jQuery:'處理程序被附加到jQuery對象中當前選定的元素,所以這些元素必須存在於調用.bind()發生的位置。 –

回答

0

您需要添加一個返回按鈕點擊

$("input[type='submit']").bind("click", function() { 
    return validateUsername(myFunction); 
}); 

,你應該返回true

function myFunction() { 
    if ($(".error").length > 0) { 
     alert("errors on page"); 
     return false; 
    } 
    return true; 
} 

,並在validate方法添加回報

function validateUsername(callback) { 
    var $username = $("input[name='username']"); 
    if (typeof $username.val() === "undefined" || $username.val() === "") { 
     $("#username-error").show(); 
     $("#username-success").hide(); 
     $username.addClass("error"); 
    } else { 
     $("#username-error").hide(); 
     $("#username-success").show(); 
     $username.removeClass("error"); 
    } 
    if (callback) { 
     return callback(); 
    } 

}

但在這使用了回調的確實沒有太大的意義。