Autor Zpráva
Milan1236000
Profil
Ahoj,

mám pár proměnných a potřeboval bych je nějakým způsobem "zřetězit" do jednoho řádku. Pokud to zkouším s proměnnými, zdá se, že to nefunguje. Funguje mi jen řetěz přímých konkrétních selektorů na stránce.
$(`${$reason}, ${$quantity}`).trigger("change"); // nejde
$([$reason, $quantity]).trigger("change"); // nejde
$($reason + $quantity).trigger("change"); // nejde
$("#reasonField, #QuantityField").trigger("change");
Jak se správně řetězejí proměnné do selektoru?

Díky.
Kajman
Profil
Pokud jsou v proměnných $reason a $quantity instance jQuery, tak použitje metodu add.

$reason.add($quantity).trigger("change")
Milan1236000
Profil
Kajman:
A nějak na způsob, jak jsem uvedl, by to nešlo? Třeba když mám takto 5 proměnných se selektory, tak to musím zapsat jako
$reason.add($quantity).add($var1).add($var2).add($var3).trigger("change"); ?

Samozřejmě bych místo toho mohl udělat
var $fields = $("#id1, #id2, #id3, #id4, #id5");
$fields.trigger("change");
ale je to zbytečně proměnná navíc, tak mě zajímalo, jestli by ty jednotlivé proměnné nešly nějak zřetězit nebo tak něco. No, vypadá to, že zřejmě ne, nevadí.
Díky za odpověď. :)
Kcko
Profil
Milan1236000:
jestli by ty jednotlivé proměnné nešly nějak zřetězit nebo tak něco
No lze a to tak jak Ti ukázal Kajman. Jedna proměnná navíc Ti taky vadí, tak co hledáš tedy za způsob?
_es
Profil
Milan1236000:
Samozřejmě bych místo toho mohl udělat
var $fields = $("#id1, #id2, #id3, #id4, #id5");
$fields.trigger("change");
ale je to zbytečně proměnná navíc
No tak môžeš mať aj skoro rovnaký tvoj kód bez „premennej naviac“:
$("#id1, #id2, #id3, #id4, #id5").trigger("change");
Nie je jasné, aké ešte iné špeciálnejšie „zreťazenie“ vlastne chceš.
Milan1236000
Profil
Kcko:
Psal jsem to hned v prvním příspěvku, jaký způsob myslím tím "řetězením":
$(`${$reason}, ${$quantity}`).trigger("change"); // nejde
$([$reason, $quantity]).trigger("change"); // nejde
$($reason + $quantity).trigger("change"); // nejde

Škoda, že třeba místo
$reason.add($quantity).add($var1).add($var2).add($var3).trigger("change");
nefunguje
$reason.add($quantity, $var1, $var2, $var3).trigger("change");

Snad je jasné, kam tím mířím.

Takový malý nedostatek jQuery. Třeba něco takového v budoucnu vývojáři přidají. :)


_es:
To je taky možnost, jenže proč zbytečně duplikovat konkrétní názvy elementů, když je mám všechny v proměnných a pracuji s nimi na více místech... :)
_es
Profil
Milan1236000:
No tak predsa môžeš stále podobne použiť Kajmanov kód, akurát namiesto premenných tam dáš výrazy, ktorých výsledkom budú spomínané „instance jQuery“. Napríklad si môžeš aj podobne vytvoriť pole [premenná1, premenná2, premenná3] a pod.
Kajman
Profil
Na poli jQuery objektů můžete zavolat metodu Array.reduce, která zavolá add postupně na jeho prvky...

[$reason, $quantity, $var1, $var2, $var3].reduce((o,a)=>o.add(a),$()).trigger("change");

Nebo si do jQuery přidat vlastní metodu, která bude akceptovat libovolný počet parametrů, když po ní tolik toužíte. Něco jako

jQuery.fn.extend({
  addArray: function(arr) {
    return arr.reduce(function(o,a){return o.add(a)},this);
  },
  addAll: function() {
    return this.addArray([].slice.call(arguments));
  }
});

A pak můžete používat
$reason.addAll($quantity, $var1, $var2, $var3).trigger("change");
nebo třeba
$().addArray([$reason, $quantity, $var1, $var2, $var3]).trigger("change");
Kcko
Profil
Milan1236000:
Chápu, nicméně všechny 3 příklady co jsi uvedl jsou blbost, už jen od pohledu jak bys to chtěl zapisovat.

Kajman Ti nabídl hezké řešení, já ještě doplním each => Select multiple jQuery objects with .add()
Milan1236000
Profil
Super, díky za tipy. :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0