Autor Zpráva
jar.ek
Profil *
Zdravím!
Mám problém:
v <head> mám definovanou funkci

<script type="text/javascript"> 
function deleteComment(id) {
...
}

kterou později v <body> volám:

<script>deleteComment(1);</script>

bohužel funkce se nevykoná. Chrome mi hází tuto chybu:
Uncaught TypeError: Object [object Object] has no method 'deleteComment'
Proč?
Děkuji...
Someone
Profil
co je obsahem funkce?
jar.ek
Profil *
Funkce volá jQuery funkci z externího souboru.
function deleteComment(id) {
           jQuery.fn.deleteComment(id);
}
Vím, že to vypadá divně, že stačí zavolat funkci jQuery.fn.deleteComment(id); přímo, ale má to své určité opodstatnění :)
Obsah funkce jQuery.fn.deleteComment(id):
        
jQuery.fn.deleteComment = function(id) { 
            $.ajax({
              type: "GET",
              url: "./deleteComment.php",
              data: "cid="+id,
              success: function(d){  
                switch(d)
                    {
                    case 0:
                      alert('Nastala nečekaná chyba: '+d);
                      
                      break;
                    case 1:
                      reloadComments();
                      break;
                    case 2:
                        //comment v db neni
                      //alert('Nastala nečekaná chyba: '+data);  
                      break;
                    case 3:
                        // pri mazani nastala chyba, nebo se v db nenachazi
                      alert('Nastala nečekaná chyba: '+d);
                      break;
                    case 4:
                        // neni vlastnikem
                      alert('Nejste autorem příspěvku.');
                      
                      break;
                    default:
                      alert('Nastala nečekaná chyba: '+d);
                }
              
              }

            });    
        }
Radek9
Profil
jar.ek:
Nesnažíš se tu metodu volat ještě před definováním? Mimochodem, můžu mít takové dva všetečné dotazy?
1) Proč proboha tu funkci přiřazuješ do prototypu jQuery?
2) Víš, že při každém zavolání té funkce se do success ukládá nová funkce? Podle mě by bylo snazší si ji definovat jen jednou a používat ji univerzálně.
jar.ek
Profil *
Radek9:
Ano bude to tím...
Odpověď na otázky:
1) Jsem začátečník, takto jsem to vyčetl z nějaké stránky. Nejsem vševědoucí abych věděl, že to lze udělat i jinak. Chybama se člověk učí. Budu rád, když mi poradíte, jak to udělat správně.
2) Ehm, která funkce se ukládá kam? Moc Vám nerozumím :) (začátečník), prosím o vysvětlení.
Radek9
Profil
jar.ek:
Ad 1) Prototyp funkce (jQuery) je objekt, do kterého se nahlíží v instancích daného objektu. Tzn., že bude fungovat toto, ale bude to postrádat smysl:
$("div").deleteComment(10);
Ad 2) Tím, že funkce v JavaScriptu jsou objekty, je jejich vytvoření a držení v paměti trošku „dražší“. Proto je celý JavaScript založen na prototypech a scopes, aby se co nejméně vytvářely nové shodné funkce. Takže by to mohlo vypadat nějak takto:
(function($){
     function callback(d){  
                switch(d)
                    {
                    case 0:
                      alert('Nastala nečekaná chyba: '+d);
                      
                      break;
                    case 1:
                      reloadComments();
                      break;
                    case 2:
                        //comment v db neni
                      //alert('Nastala nečekaná chyba: '+data);  
                      break;
                    case 3:
                        // pri mazani nastala chyba, nebo se v db nenachazi
                      alert('Nastala nečekaná chyba: '+d);
                      break;
                    case 4:
                        // neni vlastnikem
                      alert('Nejste autorem příspěvku.');
                      
                      break;
                    default:
                      alert('Nastala nečekaná chyba: '+d);
                }
              
          }
    $.deleteComment = function(id) {
            $.ajax({
              type: "GET",
              url: "./deleteComment.php",
              data: "cid="+id,
              success: callback
 
            });    
        }
})(jQuery);
Můžeš tu funkci popřípadě hned dát na window, nevidím moc důvod ji lepit k jQuery.
jar.ek
Profil *
Ano, rozumím.
Děkuji za vysvětlení.

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