2016-08-15 2 views
0

Ich möchte einige Javascript ausführen, basierend auf einige PHP-Anweisung, aber ich kann nicht die Anführungszeichen um meinen Link korrekt .. In der Konsole zeigt, dass a) fehlt in der folgenden Zeile. Ich bin mir sicher, dass ich die Zitate durcheinander gebracht habe, es war korrekt, als ich gerade Javascript hatte, aber jetzt mit echo mischend, kann ich es nicht verstehen. Ich benutze einfache Anführungszeichen um die ganze Sache herum und verdoppele mich darin. Der Rest funktioniert, bitte schauen Sie und helfen Sie mir, diese Linie zu reparieren. Vielen Dank!echoing Javascript innerhalb von PHP, kann nicht Zitate richtig

$(this).append("<a href=""index.php?patient=test&a="".""appointment_nums[count]""."">Schedule Appointment </a>"); 


if ($mode== 'view' && $action==''){ 
    echo '<script > 

$(document).ready(function(e){ 

    $("body").click(function(event) { 
redirect = $(event.target).context.getAttribute("href"); 
}); 


checkColumns(); 


}); 

function checkColumns(){ 

    count=0; 

appointment_nums = []; 
$(".mgrid_table > tbody > tr").each(function() { 

appointment_nums.push($(this).find("td").eq(3).find("label").html()); 

appointment_nums = appointment_nums.filter(function(n){ return n != undefined  }); 

}); 
appointments = appointment_nums.length; 

appendColumns(); 

} 
function appendColumns(){ 


function ajax() { 

    return $.ajax({ 
     type:"post", 
     url: "../testrequest.php", 
     data : {appointment_nums:appointment_nums}, 
     dataType:"json", 
    }); 
    }; 

ajax().done(function(result){ 

$("table:nth-of-type(2) > tbody > tr > td:nth-of-type(2)").each(function() {  
if($(this).children().length < 1){ 
    if (result[count] == false){ 
    $(this).append("<a href=""index.php?patient=test&a="".""appointment_nums[count]""."">Schedule Appointment </a>"); 
    }else{ 

     $(this).append("<span>Waiting For Doctor to Schedule</span>"); 
     } 
} 
    count = count + 1 ; 
}); 

}); 
} 
</script>'; 
+0

Code ist schwer zu lesen. Ich will es einfach nicht debuggen. Whitespace ist dein Freund. – Tibrogargan

Antwort

2

Entweder variieren die Kurstypen oder Flucht beginnen. z.B. mit diesem rohen (und gebrochenen) Schnipsel:

.append("<a href="foo.php" onclick="someFunction("hi mom!");">"); 

haben Sie tatsächlich Code 3 Ebenen tief. Es ist das Original Javascript (Schicht 1):

.append("<a href="foo.php" onclick="someFunction("hi mom!");">"); 
     ^--------------layer 1--------------------------------^ 

Dann gibt es die eingebettete HTML (Schicht 2):

.append("<a href="foo.php" onclick="someFunction("hi mom!");">"); 
       ^-------^   ^----------layer 2---------^ 

Und dann ist da noch die Unter eingebetteten Javascript (Schicht 3):

.append("<a href="foo.php" onclick="someFunction("hi mom!");">"); 
               ^-------^ 

In jedem Fall müssen Sie die Anführungszeichen verwenden, die für die Ebene geeignet sind, in die Sie eingebettet sind. So Ihre Schicht-2-Kurse in der Schicht einzubetten 1, Verwendung entkommt:

.append("<a href=\"foo.php\" onclick=\"someFunction(\"hi mom!\");\">"); 

So, jetzt haben Sie gültige Javascript in Schicht 1. Aber die HTML selbst ist immer noch gebrochen habe, weil einmal das Snippet im DOM eingebettet ist , Sie am Ende mit

<a href="foo.php" onclick="someFunction("hi mom!");"> 
          ^---start attribute 
             ^---end attribute 
                ^--start unterminated attribute 

So, jetzt müssen Sie Sorge Schicht 3 in Schicht Einbettung 2. Da es Javascript-in-html:

.append("<a href=\"foo.php\" onclick=\"someFunction(&quot;hi mom!&quot;);">\"); 
       ^--------^----------^ etc... layer 2-in-1 escapes 
                ^^^^^--------^^^^^ layer 3-in-1 quotes 

Grundsätzlich - man muss immer den Kontext betrachten in dem der Code gesehen wird. Wenn Sie HTML in JavaScript einbetten, müssen alle Anführungszeichen in HTML auch gültiges Javascript sein. Wenn Sie Javascsript in HTML einbetten, müssen alle JS-Anführungszeichen auch gültiges HTML erzeugen. Und wenn Sie Sprachen 3 oder 4 Ebenen tief verschachteln, müssen Sie ALLE Schichten berücksichtigen. Jede Schicht muss selbst für alle übergeordneten Schichten gültig sein.

+0

Danke, ich habe gerade eine Variable mit der Zeichenfolge, die ich brauche, und steckte es dort. Mein Angebotsproblem wurde behoben, aber diese Problemumgehung behob mein anfängliches Problem noch nicht so, wie ich ursprünglich gedacht hatte. Do! – nick

1

Benutzen Sie .. IE

$(this).append('<a href="index.php?patient=test&a=' . 'appointment_nums[count]' . '>Schedule Appointment </a>'); 
+0

Ich habe diesen Weg versucht und es hat immer noch denselben Fehler in der Konsole – nick

Verwandte Themen