Ich habe meinen Code ziemlich schlecht gemacht, also brauche ich ein bisschen Hilfe.Wie habe ich mein Javascript durcheinander gebracht?
Ich erhalte die folgende Fehlermeldung:
SyntaxError: expected expression, got end of script
Der Fehler sagt mir zu sein scheint, dass ich entweder eine Klammer oder Semikolon deplatziert und wegen der verrückten Art von heute habe ich nur Ich kann es nicht finden. Ich versuchte gerade, mein Javascript weniger aufdringlich zu machen, indem ich die Ereignis-Listener-Funktionalität unter einem window.onload
-Funktionshandler innerhalb von UserInterface.js bewegte; Allerdings musste ich ein "Fields" -Array zwischen PHP und dem onload-Ereignis übergeben, daher möchte ich das onload-Ereignis in folgendem Verzeichnis behalten: <body onload="OnLoad('.$EncodedFields . ');">';
, es sei denn, jemand kann mir einen besseren Weg zur Übergabe dieser Variablen nennen.
Irgendwie in meiner Einmischung habe ich diesen Fehler ausgelöst. Kann jemand diesen Fehler beheben? Und wie sollte ich eine PHP-Variable richtig an Javascript übergeben, um in einem Onload-Event verwendet zu werden?
UserInterface.php
class UserInterface {
var $ParentAppInstance;
function __construct($AppInstance){
$this->ParentAppInstance = $AppInstance;
$this->DrawPageHTML();
$this->DrawDBSetDropdown();
$this->DrawQueryForm();
}
//Override thjis function to change the HTML and PHP of the UI page.
protected function DrawPageHTML(){
$DBSet_Num = filter_var($this->ParentAppInstance->CurrentDBSet_Str, FILTER_SANITIZE_NUMBER_INT);
$CurrDBSet_Obj = $this->ParentAppInstance->DBSets_Arr[$DBSet_Num];
$EncodedFields = json_encode($CurrDBSet_Obj->GetDBSetFields());
echo '<body onload="OnLoad('. $EncodedFields .');">';
echo '
<div id="DebugOutput"></div>
</body>
';
//json_encode($CurrDBSet_Obj->GetDBSetFields())
echo '$AppInstanceData: ' . '<br>';
echo '--CurrentDBSet_Str: ' . $this->ParentAppInstance->CurrentDBSet_Str;
}
protected function DrawDBSetDropdown(){
echo '<div align="right">';
echo '<select onchange="SwitchDatabaseSet();" name="DBSetList" form="DBSetSelector" id="DBSetSelector">';
$i = 0;
foreach ($this->ParentAppInstance->DBSets_Arr as $DBSet){
if ($DBSet->DBSetName == $this->ParentAppInstance->CurrentDBSet_Str){
echo '<option value="' . $DBSet->DBSetName . '">' . $DBSet->DBSetName . '</option>';
}
}
foreach ($this->ParentAppInstance->DBSets_Arr as $DBSet){
if ($DBSet->DBSetName == $this->ParentAppInstance->CurrentDBSet_Str){/* DO NOTHING. IE. IGNORE IT*/}
else if ($DBSet->DBSetName == 'DBSet0'){/* DO NOTHING. IE. IGNORE IT*/}
else{
//Add the DBSet to the dropdown list.
$i++;
echo '<option value="' . $DBSet->DBSetName . '">' . $DBSet->DBSetName . '</option>';
}
}
echo '</select>';
echo '</div>';
}
protected function DrawQueryForm(){
echo '<form action="search.php" method="post">';
echo '<div id="QFormBody">';
$NumActiveQBoxes = $this->ParentAppInstance->Config['ApplicationSettings']['NumberDefaultQueryOptions'];
for ($i = 0; $i < $NumActiveQBoxes; $i++){
echo '<div class="QueryBox" name="QBox_' . $i . '">';
echo '<select name=Field_' . $i . '">';
$DBSet_Num = filter_var($this->ParentAppInstance->CurrentDBSet_Str, FILTER_SANITIZE_NUMBER_INT);
$CurrDBSet_Obj = $this->ParentAppInstance->DBSets_Arr[$DBSet_Num];
foreach($CurrDBSet_Obj->GetDBSetFields() as $Field){
echo '<option>' . $Field . '</option>';
}
echo '</select>';
echo '<input type="text"></input>';
echo '<button class= "RMButton" type="button">-</button>';
echo '</div>';
}
echo '<button type="button" id="add" onclick="AddQueryBox();">+</button>';
echo '<button type="submit" id="submit">SEARCH</button>';
echo '</Form>';
$EncodedFields = json_encode($CurrDBSet_Obj->GetDBSetFields());
echo '<script src=/GLS_DBSearchProject/JavaScript/UserInterface.js></script>';
}
}
UserInterface.js
var DBSetFields = [];
var NumQBoxes = 3;
function OnLoad(Fields){
console.log("Alpha");
console.log(Fields);
CloneDBSetFields(Fields);
var RMNodeList = document.getElementsByClassName('RMButton');
for (var i = 0; i < RMNodeList.length; ++i) {
console.log(RMNodeList[i]);
RMNodeList[i].onclick = RemoveQBox; // Calling myNodeList.item(i) isn't necessary in JavaScript
}
}
function Fields_FOREACH(ELEMENT, INDEX, ARRAY){
var FieldOption = document.createElement('option');
FieldOption.setAttribute('value', ARRAY[INDEX]);
FieldOption.innerHTML = ARRAY[INDEX];
this.appendChild(FieldOption);
}
function CloneDBSetFields(Fields){
console.log("CloneDBSetFields");
DBSetFields = Fields;
}
function AddQueryBox(){
NumQBoxes += 1;
var NewQBox = document.createElement('div');
NewQBox.setAttribute('class', 'QueryBox');
//Create and fill Field Selector dropdown "select" element
var FieldSelector = document.createElement('select');
FieldSelector.setAttribute('name', 'Field_' + NumQBoxes);
//foreach element in Fields
console.log(DBSetFields);
DBSetFields.forEach(Fields_FOREACH, FieldSelector);
//Create and fill
var QueryText = document.createElement('input');
QueryText.setAttribute('type', 'text');
QueryText.setAttribute('name', 'Query_' + NumQBoxes);
//Create "-" Remove button for removing query lines.
var RemoveButton = document.createElement('button');
RemoveButton.innerHTML = "-";
RemoveButton.setAttribute('type', 'button');
RemoveButton.setAttribute('class', 'RMButton');
RemoveButton.addEventListener("click", RemoveQBox);
//Combine the individual elements into a new query box and insert the new query box into the HTML Document
NewQBox.appendChild(FieldSelector);
NewQBox.appendChild(QueryText);
NewQBox.appendChild(RemoveButton);
document.getElementById("QFormBody").insertBefore(NewQBox, document.getElementById("add"));
}
function RemoveQBox(e){
console.log("Remove");
var RemoveButton = this; //this == e.currentTarget
console.log(RemoveButton);
var QBox = RemoveButton.parentNode;
QBox.remove();
NumQBoxes -= 1;
}
Wenn Sie viel JavaScript schreiben, verwenden Sie ['jslint'] (https://www.npmjs.com/package/jslint), um zu überprüfen, ob Ihr Code gültig ist. – tadman
Es gibt keine größeren Syntaxfehler im Code soweit ich sehen kann – JordanHendrix
Alle jslint sagt mir ist, dass ich _ '"strict" verwenden sollte; 'vor' Konsole '. Das hilft leider nicht viel. –