Tovább a tartalomhoz

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.

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).

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.

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.

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.

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.

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:

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

Készült:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások