if statement bir nechta boolean shartlarini tekshiradi

Har bir shart uchun checkEmpty() funktsiyasini chaqirish kerak bo'lgan if statement mavjud.

function checkFormFilled(evt){
    var isFilled;
    if(checkEmpty('id1', 'class1') && //condition 1
       checkEmpty('id2', 'class2') && //condition 2
       checkEmpty('id3', 'class3') && //condition 3
       checkEmpty('id4', 'class4')){ //condition 4
       evt.preventDefault();
       isFilled = true;
    }
    return isFilled;
}

Muammo shundaki, 1 sharti noto'g'ri bo'lsa (avvalgi holat fayli noto'g'ri), evt.preventDefault() liniyasiga o'tadi va boshqa quyidagi checkEmpty() funktsiyalarini chaqirmaydi.

Barcha shartlar qaytarsa, evt.preventDefault() ni chaqirmoqchiman.

Bu ishni qilish uchun boshqa yo'l bormi?

0
Siz nima qilayotganingizni aniqlaysiz, muammo nimada?
qo'shib qo'ydi muallif Nicolas, manba
Buning sababi AND operator birinchi marta noto'g'ri keyin yopiladi. sizga OR operatori kerak.
qo'shib qo'ydi muallif Nicolas, manba
Bunga qo'shimcha ravishda optimallashtirish mumkin! .. nima?
qo'shib qo'ydi muallif ibrahim mahrir, manba
Bu kodni id1 , id2 ... yoki bu misolga o'xshab kuzatib boradimi?
qo'shib qo'ydi muallif ibrahim mahrir, manba
checkEmpty kodini yuborishingiz mumkinmi?
qo'shib qo'ydi muallif ibrahim mahrir, manba
Shunday qilib, muammoga duch kelmaslik kerak. to'g'ri yo'l tutasiz
qo'shib qo'ydi muallif Behrad Khodayar, manba
checkEmpty ning ta'rifiga kirishingiz mumkinmi? Qaytib kelmasidan oldin uni inkor qilyaptimi deb o'ylayman!
qo'shib qo'ydi muallif Behrad Khodayar, manba
'Birinchi shart 1 xato bo'lsa, u evt.preventDefault() qatoriga o'tadi.' - bu haqiqat bo'lishi mumkin emas. U evt.preventDefault() ni chaqirmaslik kerak.
qo'shib qo'ydi muallif Mikhail Chibel, manba
birinchi shart 1 xato bo'lsa, u evt.preventDefault() liniyasiga o'tadi. Evt.preventDefault() liniyasini chaqirishdan oldin, barcha to'rt shartni chaqirish kerak.
qo'shib qo'ydi muallif haeminish, manba
@ibrahimmahrir bu faqat mag'lubiyatdir.
qo'shib qo'ydi muallif haeminish, manba
checkEmpty() bo'sh bo'lsa, rostini qaytaradi va to'ldirilgan qiymatni qaytaradi
qo'shib qo'ydi muallif haeminish, manba
Menga kerak bo'lgan narsa - 1-4dan barcha shartlarni tekshirish (chaqirish) va ulardan biri buzilgan hollarda qaytarish.
qo'shib qo'ydi muallif haeminish, manba

6 javoblar

VEYA bo'lgan | mantiqiy operatorini sinab ko'ring

3
qo'shib qo'ydi

Agar Siz

har bir shart uchun checkEmpty() funktsiyasini chaqirishi kerak.

Va

Barcha shartlar qaytganida evt.preventDefault() ni chaqirishni xohlayman.

Agar Siz are sure that checkEmpty() returns a boolean, you could use the bitwise Va (&) operator:

function checkEmpty(x) {
  console.log('checkEmpty called for ' + x);

  return false;
}
if(checkEmpty('..1', '....') & //condition 1
   checkEmpty('..2', '....') & //condition 2
   checkEmpty('..3', '....') & //condition 3
   checkEmpty('..4', '....')){ //condition 4
  console.log('inside if');
}

Chiqish:

checkEmpty called for ..1
checkEmpty called for ..2
checkEmpty called for ..3
checkEmpty called for ..4

fiddle demo ga qarang .

1
qo'shib qo'ydi
Eslatma: agar checkEmpty() true yoki false dan boshqa biror narsani qaytarishi mumkin bo'lsa, & bir bitwise operatori. Misol: 1 & 10 funktsiyasi mantiqiy operator bo'lsa, siz kutmagan narsa emas 0 funksiyasini qaytaradi ( truthy && truthy haqiqiy ).
qo'shib qo'ydi muallif acdcjunior, manba
OTOD, agar checkEmpty() har doim bir boolean qaytaradi, bilmasangiz, ularni bekor qilishingiz mumkin: if (!! checkEmpty ('.. 1', '.... har bir checkEmpty() < !! ga qo'shib qo'ying (".. 2", "....") ... /code> chaqiruv).
qo'shib qo'ydi muallif acdcjunior, manba

If at least one of the conditions is False, it will not go inside the IF block. For multiple && statements, once a FALSE is received, all other succeeding && statements are not checked anymore and FALSE is returned.

1
qo'shib qo'ydi

Ob'ektlar majmuasi mavjud deb hisoblasangiz, har funktsiyasini sinab ko'rishingiz mumkin.

Misol

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var array = [];

for (var i = 0; i < 4; i++)
{
  array.push({
    id: i, bool: true
  });
}

function check(item)
{
  return item.bool == true || false;
}

if (array.every(check))
{
  console.log("all true");
}
else
{
  console.log("return false instead");
}



// Just an Misol of something that is false
array[1].bool = false;

if (!array.every(check))
{
  console.log("something is false");
}
</div> </div>
0
qo'shib qo'ydi

What you are doing now with the chained && operators is saying if all of these things are true then event.preventDefault. If you really need to check every one of the conditions and proceed if any are true then you should use the logical OR operator || instead.

0
qo'shib qo'ydi

Uning qisqa tutashuvi.

1- In a condition check composed of &&, if the first element evaluates to false, all of the remaining conditions are ignored, returning false for the whole condition.

2- "|" dan tashkil topgan shartli tekshiruvda, agar birinchi element haqiqiy qiymatga ega bo'lsa, qolgan sharoitlarning barchasi e'tiborsiz qoldiriladi, butun holat bo'yicha qaytariladi.


U savolni tahrir qildi. Bu endi to'g'ri emas. Men bu erda qolishni istayman.

Bunga eng yaxshi vaqtincha hal qilish || dan foydalanadi yoki sizning holatingizda quyi shartlarning tartibini tartibga soladi - kerak bo'lganda boshqa elementlarning sinab ko'rishlariga ruxsat berish uchun tekshiring.

0
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb