2016-06-23 14 views
1

Ich beginne mit JQuery. Wenn ich einen String als Argument in einer Funktion zu übergeben will, manchmal wird es nicht funktionieren, und ich weiß nicht, warum ...Kann keine Zeichenfolge übergeben als Funktionsargument Jquery

Dies ist ein Beispiel:

$(document).ready(test()); 

function test() { 
    $('path[secteur]').each(function() { 
     if ($(this).attr('id') == ("23C01")) { 
      id = ($(this).attr('id')); 
      afficher(id); 

     } 
    }) 
} 

function afficher(mo) { 
    document.getElementById("test").innerHTML = "<p id=" + mot + " onclick='tester(" + mot + ")'> step 1</p>"; 

} 

function tester(verbe) { 
    document.getElementById(verbe).innerHTML = "step 2"; 
} 

An diesem Beispiel funktioniert es nur gut für "afficher" aber es funktioniert nicht mit "tester". Wenn ich versuche, auf den generierten HTML-Code zu klicken, erhalte ich einen Fehler: "Uncaught SyntaxError: fehlt) nach der Argumentliste"

Wer weiß warum?

+4

Entfernen Sie Klammern '()' aus '$ (Dokument) .ready (test());'. Verwenden Sie '$ (document) .ready (test);' – Tushar

+2

Ihre Deklaration für'Afficher() 'ruft den Parameter' mo' auf, aber der Code nennt es 'mot'. – Pointy

+2

Es scheint eine Reihe von Dingen mit diesem Code falsch zu sein. Sie definieren zum Beispiel niemals die Variable "mot". Sie führen auch 'test()' * vor * dem 'document'-Ready-Event aus (siehe @ Tushars Kommentar), wenn Sie also'Afficher (id) aufrufen, kann dieser' ID'-Wert nichts enthalten. Was ist der genaue Code, der den Fehler verursacht? Sie fügen HTML dynamisch mit eingebettetem JavaScript hinzu. Wenn das eingebettete JavaScript fehlerhaft ist, * sehen Sie es an * und sehen Sie, warum es möglicherweise fehlerhaft ist. – David

Antwort

0
  1. Js Seite: Sie haben qoutes für Zeichenfolge in Funktionsaufruf verloren.
  2. Html Seite: Sie haben nicht entkommen Attributwert.
  3. Alle Ihre Funktionen müssen global sein.
  4. $(document).ready(test()); - test wird sofort ausgeführt.

Und der ganze Code ist schrecklich.

0

Es gibt einen Unterschied, wenn Sie eine Funktion im Programmkontext nennen:

var test = 2; 
test++; 
test = domymath(test); 
alert(test); 

Oder wenn Sie rufen Sie funktionieren mit Rückruf einer Funktion:

var test = 2; 
test++; 
test = domymath(test, alert); 

Sie können Argumente/Werte übergeben in () zu einer Funktion, wenn Sie es im Programmkontext aufrufen, aber Sie können sie nicht übergeben, wenn Sie eine Funktion als Rückruf aufrufen.
Da für den Callback nur der Name der Funktion definiert ist, die aufgerufen werden soll.

Also in Ihrem Fall Gebrauch:

$(document).ready(test); 
// calls test(); 

$(document).ready(function() { 
     test(one, two); 
}); 
// calls test(one, two); 
Verwandte Themen