# Beágyazott feltételes logika

> Mikor működik és mikor nem a másik feltételes mezőre épülő logika, a kerülőmegoldások és az ellenőrző szkript.

Beágyazott feltételes logikáról akkor beszélünk, ha egy mező szabálya olyan mezőre épül, amelynek maga is feltételes logikája van (például a C mező a B mezőtől függ, a B mező pedig az A-tól). A Gravity Forms ezt hivatalosan nem támogatja. Léteznek kerülőmegoldások, de ezeknek nincs garanciája.

## Mikor működik

A beágyazott logika akkor működik, ha a feltételes mezőnek:

- nincs alapértéke,
- nem dinamikusan van kitöltve,
- és ha legördülő lista, akkor van helyőrzője (üres értékű lehetőség).

## Mikor nem működik

Nem működik, ha:

- a mezőnek van alapértéke,
- a mező dinamikusan van kitöltve,
- a mező legördülő lista, és nincs helyőrzője,
- többoldalas vagy beszélgetős űrlapon a korábbi mezők értéke megváltozik.

Ennek oka, hogy a feltétel miatt elrejtett mezőt a rendszer visszaállítja a kezdőértékére. A tőle függő logika így nem üres, hanem ezzel a visszaállított értékkel értékelődik ki, ami váratlan.

## Kerülőmegoldások

### Plusz feltételek

Egyszerűbb esetekben a legjobb megoldás, ha a függőséget kifejezetten megadod. Ha a B mező az A-tól függ, és azt akarod, hogy a C mező a B-től függjön, akkor a C mezőnél a B-re vonatkozó szabály mellé másold át a B mező szabályait is. Így a C mező kifejezetten mindkét mezőtől (B és A) függ. Összetett beágyazásnál ez nem biztos, hogy elég.

### Helyőrző a legördülő listában

A problémát leggyakrabban a legördülő lista okozza. Ha nincs benne üres értékű lehetőség (például helyőrző), akkor a lista elrejtéskor az első lehetőségre áll vissza. Sokan azt várják, hogy a rejtett mező üres, és erre építik a beágyazott szabályokat. A legegyszerűbb megoldás, hogy a legördülő listának legyen helyőrzője: ekkor elrejtéskor üres értékre áll vissza. Az alapérték és a dinamikus kitöltés problémáját ez nem oldja meg.

## Beágyazott logika keresése

Hogy van-e az űrlapodon beágyazott logika, ellenőrizheted: nyisd meg az űrlapszerkesztőt, és másold be az alábbi szkriptet a böngésző konzoljába.

```js
var deps = {};

for( var i = 0; i < form.fields.length; i++ ) {

  var field = form.fields[i];
  if( ! field.conditionalLogic ) { continue; }

  if( typeof deps[ field.id ] === 'undefined' ) { deps[ field.id ] = []; }

  for( var j = 0; j < field.conditionalLogic.rules.length; j++ ) {
    var rule = field.conditionalLogic.rules[j];
    if( jQuery.inArray( rule.fieldId, deps[ field.id ] ) === -1 ) {
      deps[ field.id ].push( rule.fieldId );
    }
  }

}

for( var fieldId in deps ) {

  if( ! deps.hasOwnProperty( fieldId ) ) { continue; }

  for( i = 0; i < deps[ fieldId ].length; i++ ) {
    var depFieldId = deps[ fieldId ][i];
    if( typeof deps[ depFieldId ] !== 'undefined' ) {
      console.log( 'Nested dependency found', '|', 'ID:', fieldId, '|', 'Label:', GetFieldById( fieldId ).label );
    }
  }

}
```

A szkript minden talált függőségnél kiír egy sort a konzolra, például:

```text
Nested dependency found | ID: 3 | Label: Field C
```
