Autor Zpráva
Gray blogger
Profil *
Vygeneruju řadu formulářových setů a každý má svoje id. Když na jeden z nich kliknu a chci vrátit id, jak to děláte? Zjistil jsem, že toto nevrací id toho setu, ale id toho objektu na který jsem kliknul. Musím tedy napsat funkci, která bude procházet všechny rodiče dokud nenajdu název tagu fieldset? To by mi přišlo jako dost složité. Ono čím víc trávím času tady těma formulářema, tím víc mě to přestává bavit. Psaní webových stránek je neskutečně složité a zdlouhavé. To je děs.
<fieldset id=i<?=$i?> onclick="FSId=event.target.id;">
<legend><?=$words[$i]?></legend>
// nějaké inputy
<fieldset>
Tomášeek
Profil
Gray blogger:
JavaScript ma .parent, jQuery .parent(). Což se takhle mrknout do dokumentace, než položíš zbytečný dotaz?
Gray blogger
Profil *
Ale naštěstí jsem na to přišel:
<pre><fieldset id=i<?=$i?> onclick="FSId=event.target.id;console.log($(this).parents().prevObject.attr('id'));"></pre>


Tomášeek:
Ale to já přece vím, že má parent(), ale jak jsem psal, ten parent() vrací pokaždé jiné id a já chtěl to id, které vyvolalo událost. Ty si nečetl mou otázku, protože já se ptal na to jak to řešíte. Protože psaní cyklu zde mi přijde dost podivné. Pokaždé když bych kliknul na jiný element, který je zanořený ve fieldsetu je jiná struktura, takže parent() samotný mi nepomůže.
Kcko
Profil
Gray blogger:
closest();

btw. proč to rveš jako inline js a nepíšeš to tak, jak se to normálně (většinou) píše?
Koukal
Profil *
api.jquery.com/closest

Dobrý příklad
$( "li.item-a" )
  .closest( "ul" )
  .css( "background-color", "red" );

Kcko:
Dík za odkaz. Byl to jen test. Teď to mám takto:
<fieldset id=i<?=$i?> onclick="init(this);">
blaaablaaa
Profil
Koukal:
Spíš takto - je přehlednější mít js na jednom místě, než různě rozeseté v html.

<fieldset id=i<?=$i?> class="muj-fieldset">

$(".muj-fieldset").on("click", function(){
   //...
});
Koukal
Profil *
blaaablaaa:
No já nevím, když pracuju s dlouhým html formulářem a mám ho dole a JS mám taky dlouhý a mám ho nahoře, tak to přehledné nebude. Ale mohl bych to dát do dvou souborů. Jeden na html formulář druhý na js, který ovládá ty fieldsety. Ale myslím, že tak jak to mám je to pro mě rychlejší pro to ruční hledání. Neboť pokud je formulář moc dlouhej a je tam moc javascriptu, tak jak to dolaďuju tak to chce furt editovat html i js. Jako ve výsledku by to přehlednější bylo, ale snad až bych odladil ten formulář.
blaaablaaa
Profil
Koukal:
Ono je většinou lepší mít js a html zvlášť v souborech.
Koukal
Profil *
blaaablaaa:
To asi jo, ale snad až dokončím formulář.

Zkoušel jsem ten tebou doporučený postup a nefunguje mi.

$("input[type='radio']").on("click", hideAll($(this)) );
function hideAll(o){
 var nonCkIn = $(o).parent().not("input:checked");
 console.log($(o));
}

console.log mi vypisuje 0 nalezených objektů, protože mě odkazuje na rodičovský dokument. Jak mám odkázat na ten aktuální prvek? Onclick je v tomto právě jednodušší protože do argumentu funkce stačí zadat this.
blaaablaaa
Profil
Koukal:
Ma to byt takto
$(".muj-fieldset").on("click", function(){
  //tady lze pouzit $(this)
});
Koukal
Profil *
blaaablaaa:
No a co když budu chtít ten kód opakovat na více elementech? To mám furt psát

function(){
  //tady lze pouzit $(this)
}
?
Mlocik97
Profil
môžete použiť kombinovaný selektor
RastyAmateur
Profil
Koukal:
Ano. Nebo si myslím, že můžeš vše narvat najednou.
$(".a, .b, .c, .d").on("click", function() {
  example(this);
})
Koukal
Profil *
Mohu se tě ještě ně něco zeptat?
<section>     
<Label>1) </Label><p> 
<INPUT>text (text v závorce)<BR>
<INPUT>text (text v závorce)<BR>
<INPUT>text (text v závorce)<BR>
</section>     

Jak v Jquery specifikovat selektor, aby vrátil ten text za Input? Přesně řečno Mám vybraný například ten první radio input a při kliknutí chci schovat to co je v závorce se závorkou. To ale budu muset zabalit do nějakého elementu ne? Já bych to raději udělal automaticky. Jde o to že na mobilních zařízeních chci tu položku zkrátit, aby se neroztahovala, když už jsem ji vybral. Takže kolem (text v závorce) bych chtěl vložit tak např. strike.


RastyAmateur:
Dobrý nápad :)


Ta závorka v textu není vždy, jen někdy
Keeehi
Profil
Koukal:
Jak v Jquery specifikovat selektor, aby vrátil ten text za Input?
Nevím jak selektor ale můžeš použít next()
Koukal
Profil *
Tak toto nechápu, proč se mi nevypisuje ten vybraný radiobox (ostatní jsou skryté):

$("input[type='radio']").on("click", function(){
       var allInputs = $(this).parent().find("input");
       var NonChk = $(allInputs).not("input:checked");
       var Chk = $(allInputs).find("input:checked");
       $(NonChk).hide();
       console.log(Chk);
       // console.log($(Chk).next());
      });
    }

Chrom mi píše:
[prevObject: k.fn.init[4]]
length
:
0
prevObject
:
k.fn.init[4]
__proto__
:
Object[0]

Ten vybraní input radio tam není vidět.


Mám to. Tak find filtruje potomky, ale já chci filtrovat současné elementy v poli, takže použiju filter.


K tomu hledání textu za elementem je tady odpověď:
Get the text after span element using jquery

Elegantní se zdá být použít eq(), ale co když tam bude nějaký wrapper jako tagy u. i, em ...
RastyAmateur
Profil
Koukal:
K tomu hledání textu za elementem je tady odpověď
Spíš bych řekl, že odpověď je v [#14]. Přijde mi mnohem mnohem rozumnější to zabalit do nějakého elementu. Vlastně bych nikdy nenechával text válet se jen tak někde za inputem, nebo kdekoliv jinde.
Gray blogger
Profil *
RastyAmateur:
Jo, ale já beru v potaz celkovou přehlednost kódu. Nedávno mi například někdo navrhl zabalit řádek s inputem do label, jenže lable už používám jako nadpis otázky ve formuláři. Navíc nemám rád tagy s dlouhým názvem. Co mi v HTML/DOM schází jsou tagy c-h. Je tam volný nevyužitý prostor a tyto tagy bych rád použil k takovému balení o kterém mluvíš. Pokud jako baliče mám používat jen div, span, p, section, article tak to mi přijde nedostačující. Na tom řádku s input používám už "u", "i" a em tagy, u dokonce dvakrát vnořené. No a teď si představ že tam přidám další tagy, tak se to zase znepřehlední. Pokud píšu kód tak pro mě je vlastně přehlednější na konec dát br, jenže zde vzniká problém s tím balením. Tak jsem si na to napsal funkci v JS, která mi tam ty balící tagy přidá automaticky. Ale to je za jiným účelem, to čistě kvůli operacím, které tam provádím s textem ("zkracování" dlouhého textu, respektive skrytí jeho části, nikoliv smazání).

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