2016-04-06 8 views
0

私は自分のコードをかなりひどく混乱させてしまったので、少し助けが必要です。どのように私は私のJavascriptを台無しにしましたか?

私は次のエラーを取得しています:

SyntaxError: expected expression, got end of script

エラーが、私はちょうど、私は場違いブレースまたはセミコロンのいずれかを持っているので、今日の狂気の性質のことを私に言っているように見えますそれを見つけるように見えることはできません。 UserInterface.js内のwindow.onload関数ハンドラーの下でイベントリスナー機能を動かすことで、Javascriptの操作性を落とさないようにしようとしていました。しかし、私はPHPとonloadイベントの間に "Fields"配列を渡す必要があったので、誰かが私にこの変数を渡すよりよい方法を教えてくれない限り、onloadイベントを <body onload="OnLoad('.$EncodedFields . ');">';にしておきたいと思います。

どういうわけか私の悩みの中で、私はこのエラーを引き起こしました。誰もがこのエラーを修正する方法を知っていますか?そして、どのように私は正しくonloadイベントで使用されるJavascriptにPHP変数を渡す必要がありますか?だから、明らかに

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; 
} 
+5

JavaScriptをたくさん書く場合は、['jslint'](https://www.npmjs.com/package/jslint)を使ってコードが有効であることを確認してください。 – tadman

+0

コードに大きな文法エラーはありません。私が見る限り、 – JordanHendrix

+0

すべてのjslintが私に教えてくれます。 'before' console '._残念ながらそれほど役に立たない。 –

答えて

1

body onload="OnLoad('. $EncodedFields .');"

が実際に問題を引き起こしていたものです。何らかの理由で、なぜ私はまだ、PHPの連結演算子がこの場合に動作しない理由を理解していない。

この行をbody onload="OnLoad{$EncodedFields};"に変更するか、ピリオドを削除している間に一重引用符と二重引用符を入れ替えると、これも修正されます。

関連する問題