2017-04-04 17 views
0

私は文字列の配列を取得しています。配列に項目がある場合、私は一つのことをしたい、そうでなければ他のものをしたい。配列が空でないかどうかを調べる方法がわかりません。また、配列に項目がある場合でも、クロムデバッガでコードをステップ実行するときには、長さは0なので、formErrors.length > 0は使用できません。jQuery - 配列が空か、属性を持っているかどうかを確認する

エラーを取得するためのコードは次のとおりです。これは正常に動作し、エラー文字列または空の配列の配列を返しますがあればエラーと他のがない場合

var formErrors = validateFormData(formData); 

function validateFormData(data) { 
    var errors = []; 

    if (data["title"].length == 0) { 
     errors["title"] = "Project title required"; 
    } 
    if (data["client"].length == 0) { 
     errors["client"] = "Client name required"; 
    } 
    if (data["date"].length == 0) { 
     errors["date"] = "Date required"; 
    } else if (!isValidDateFormat(data["date"])) { 
     errors["date"] = "Date format invalid - Format: dd/mm/yyyy"; 
    } 
    if (data["status"] == "") { 
     errors["status"] = "Please select current status for this project"; 
    } 
    if (data["type"] == "") { 
     errors["type"] = "Please select a project type"; 
    } 
    if (data["extras"].length == 0) { 
     errors["extras"] = "You must select at least one extra for this project"; 
    } 

    return errors; 
} 

は、その後、私は一つのことをやりたいです。しかし、これは私にとってはうまくいかないビットです。

if (formErrors !== {}) { 
     displayFormErrors(formErrors); 
     event.preventDefault(); 
    } 
    else { 

     clearForm(); 
    } 

私はこれまでに複数の方法を試してきましたが、これまで何も機能していませんでした。どんな助けもありがとう、ありがとう!私は長さを引き起こすアレイ上.LENGTHを使用することはできません

EDITは、それがデータを持っている場合でも、0です。

Screenshot of chrome debugger

私は人々が気の毒求めているかについて少し困惑している、私はここでは専門家ではない私は何をしようとしているのより良い理解を得るために、私の完全なコードです。

$(document).ready(function() { 

$('#submit').on("click", onSubmitForm); 

function onSubmitForm(event) { 
    clearErrorMessages(); 

    var formData = getFormData(); 
    var formErrors = validateFormData(formData); 

    if (formErrors) { 
     displayFormErrors(formErrors); 
     event.preventDefault(); 
    } 
    else { 

     clearForm(); 

     // Do other stuff 

    } 
} 

function clearForm() { 
    $('#title').val(""); 
    $('#client').val(""); 
    $('#date').val(""); 

    $('#status').val("planning"); 

    $('#description').val(""); 

    $('.type').prop('checked', false); 
    $('.extra').prop('checked', false); 

    $('#title').focus(); 
} 

function clearErrorMessages() { 
    $(".uk-text-danger").html(""); 
} 

function getFormData() { 
    var data = []; 

    data["title"] = $('#title').val(); 
    data["client"] = $('#client').val(); 
    data["date"] = $('#date').val(); 

    data["status"] = $('select#status option:selected').val(); 

    data["description"] = $('#description').val(); 

    if ($("input[name='type']:checked").length > 0) { 
     data["type"] = $("input[name='type']:checked").val(); 
    } 
    else { 
     data["type"] = ""; 
    } 

    data["extras"] = []; 
    $.each($("input[name='extras[]']:checked"), function(index, radio) { 
     data["extras"].push(radio.value); 
    }); 

    return data; 
} 

function validateFormData(data) { 
    var errors = []; 

    if (data["title"].length == 0) { 
     errors["title"] = "Project title required"; 
    } 
    if (data["client"].length == 0) { 
     errors["client"] = "Client name required"; 
    } 
    if (data["date"].length == 0) { 
     errors["date"] = "Date required"; 
    } else if (!isValidDateFormat(data["date"])) { 
     errors["date"] = "Date format invalid - Format: dd/mm/yyyy"; 
    } 
    if (data["status"] == "") { 
     errors["status"] = "Please select current status for this project"; 
    } 
    if (data["type"] == "") { 
     errors["type"] = "Please select a project type"; 
    } 
    if (data["extras"].length == 0) { 
     errors["extras"] = "You must select at least one extra for this project"; 
    } 

    return errors; 
} 

function displayFormErrors(errors) { 
    for (var field in errors) { 
     var errorElementId = field + "Error"; 
     $('#' + errorElementId).html(errors[field]); 
    } 
} }); 

申し訳ありませんが、あまりにも多くの場合、私は何をすべきか分かりません。

+0

(== 0 array_name.length){/ *何かをする* /}場合だけであなたはおそらくあなたの配列がどのように見えるかを示すべきである – Cam

+0

使用しています。 – Cam

+0

なぜformerrors配列が必要ですか?配列の中に配列を挿入し、2番目の配列をチェックしますか?それは意味をなさない..ちょうどエラーを確認する[]あなたは必要ないformErrors – Konstantinos

答えて

0

var errors = {};validateFormData functionの中にあります。 そして、このようなオブジェクトを比較してください。

if (JSON.stringify(formErrors) !== '{}') { //do something}else { //do something}

+0

これはうまくいったようですが、わかりません!とにかくありがとう:) –

+0

あなたがしたことは間違いです、変数errors = []を配列として宣言し、if(formErrors!== {})のようなオブジェクトと比較しようとします。 –

+0

であり、このようなformErrors!== {}のようなオブジェクトを比較することはできません。代わりにJSON、stringifyを使用してオブジェクトを文字列に変換する必要があります。 –

1

空の配列、文字列またはオブジェクトはJavaScriptで "falsy"です。

つまり、配列、文​​字列、またはオブジェクトをif条件に直接渡すことができ、何かがあるかどうかによって実行されます。

if ([]) { 
    // this will never run 
} 
if ('') { 
    // this won't run either 
} 
if ({}) { 
    // nor will this 
} 
+0

まあまあではない.. 'var a = []; a.stg = "something" if(a)console.log( "yes")// < - yes; a == true; // < - false a == false // < - true a === false // < - false a === true // < - false a? true:false // < - true' – Redu

0

ここで、formErrorsが空であることを確認していますか?この検証(if-else)は、フォームを送信する関数の中になければなりません。

また使用してみてください:

IF(formErrors.length> 0)

代わりに:(!はFormErrors == {})であれば

関連する問題