Autor Zpráva
leonek
Profil
Dobrý den

V mém administračním systému jsem udělal při výpisu z DB funkci, která, ke každému záznamu s unikátním počátečním písmenem abecedy přidá id='písmenoAbecedy'. Poté jsem vytvořil <select>, který volá JS funkci, která po zvoleném písmenu přidá do URL písmeno ('neco.cz/index.php#C') a tím mne na něj přesune. Jenomže to funguje jen do P!! Dál i když jsou id správně přidělena to prostě nejde.

Zde jsou kódy:
<script type="text/JavaScript">
    function pismeno(to){
      hodnota = to.options[to.selectedIndex].value;
      window.location.hash = "#"+hodnota;
    }
  </script>

<select name=pismeno onchange="pismeno(this);"><option value=A>A</option><option value=B>B</option><option value=C>C</option><option value=D>D</option><option value=E>E</option><option value=F>F</option><option value=G>G</option><option value=H>H</option><option value=I>I</option><option value=J>J</option><option value=K>K</option><option value=L>L</option><option value=M>M</option><option value=N>N</option><option value=O>O</option><option value=P>P</option><option value=Q>Q</option><option value=R>R</option><option value=S>S</option><option value=T>T</option><option value=U>U</option><option value=V>V</option><option value=W>W</option><option value=X>X</option><option value=Y>Y</option><option value=Z>Z</option></select>
Keeehi
Profil
leonek:
Není důvod pro to, aby to nefungovalo. Prosím o odkaz na živou ukázku.
juriad
Profil
leonek:
Mě to funguje: ukázka
bestik_63
Profil
Pokud pod tento kód vložím <a href="" name="A">A</a> od A po Z tak mi to funguje.
leonek
Profil
Chvilku to trvalo než jsem to přepsal do živé ukázky:

ZDE
juriad
Profil
leonek:
Ale ty tam nikde nemáš id="R".
Porovnej:
document.getElementById('P'); // div
document.getElementById('R'); // null

Problém tedy bude spíš se skriptem, který přiřazuje ta id.
leonek
Profil
Aha....

To dělám, když procházím DB takto:
$abeceda = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");

while( $novy1 = DB ){
  if(substr($novy1["nazev"], 0, 1) == $abeceda[$i]){
    $vlozitkrizek = "id=".$abeceda[$i];
    $i += 1;
 }
//vypisu k pismenu
}



Nějak mu tam vadí Q, tak jsem ho vyndal z abecedy a funguje to. Jen se pořád nepřiřazuje Z a to bude asi tím, že je hned po W, ale nevim proč?
Vyzkoušejte: ZDE
Keeehi
Profil
leonek:
Pěkné, ale nebezpečné. Pokud bude ve výpisu náhodou chybět nějaké písmeno (třeba zrovna to Q), tak budeš mít problém.
Lepší by proto bylo:
old = "";
while( pracesDB ){
    $vlozitkrizek="";
    if(substr($novy1["nazev"], 0, 1) != $old){
      $vlozitkrizek = ' id="'.substr($novy1["nazev"], 0, 1).'"';
      $old = substr($novy1["nazev"], 0, 1);
    }
    //vypisu k pismenu
}
juriad
Profil
Nikde nebylo řečeno, že pořadí je vzestupné; jindy to totiž nefunguje. Když je těch písmen 26, klidně bych si do pole poznamenal, zda už bylo vyčerpáno.
leonek
Profil
Keeehi:
Hezké, použil jsem to a funguje, děkuji :)

Ale podívej co to dělá v kódu... S tím mám problém u většiny PHP funkcí pro práci s řetězci, že když je třeba zkracuji tak poslední písmeno je neznámý znak (otazník v kosočtverci).
juriad
Profil
Použij místo substr funkci mb_substr. Viz též ukázku substr vs. mb_substr - délka řetězce.
juriad
Profil
$pouzitaPismena = array();
while ($novy1 = DB) {
  $vlozit = '';
  $pismeno = mb_substr($novy1['nazev'], 0, 1);
  if (!isset($pouzitaPismena[$pismeno])) {
    $pouzitaPismena[$pismeno] = TRUE;
    $vlozit = ' id="' . $pismeno . '"';
  }
  # vypsání $vlozit
}
leonek
Profil
juriad:
Ano, tuto funkci použiji... :)

Ono je to ve finále jedno jestli je tam těch ID víc protože prohlížeč správně bere jeho první výskyt jako hlavní. V tom případě to splňuje všechny mé požadavky a funguje výborně.

Děkuji a přeji příjemný zbytek dne... :)

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