2016-12-27 1 views
0

Innerhalb einer PHP-Klasse definiere ich eine Tabelle, die eine Liste der Clients anzeigt, die man kontaktieren muss. In Spalte 7 habe ich eine Checkbox integriert, damit der Benutzer den Client anruft.Javascript-Funktion läuft nur einmal

Das Problem ist, dass die JS-Funktion führt die erstmalige und dann zum zweiten Mal heißt es: default.php page = _PhoneBankingP1: 1 Uncaught Reference: kontaktierten nicht definiert ist (...)

Die Module in Verwendung sind im folgenden aufgeführt:

public function phonebank($townCode,$streetCode){   
      $query = "SELECT clientId, clientFirstname1, clientLastname1, clientAddress, "; 
      $query .= "  clientMailshot, clientPhone1, clientMobile1, clientContacted, min(clientDoB) "; 
      $query .= "FROM _clients "; 
      $query .= "WHERE _clients.streetCode = '{$streetCode}' and "; 
      $query .= "  _clients.townCode = '{$townCode}' and "; 
      $query .= "  _clients.GE = 'Y' "; 
      $query .= "GROUP BY clientAddress "; 
      $result = $this->db->query($query); 


      $output = ""; 
      if ($result->num_rows > 0){ 
       $output .= "<div class='alert alert-info'><strong>Information!</strong> All the residents shown below have been extracted from the last Electoral Register.</div>"; 
       $output .= "<table class='table table-striped' style='font-size:10pt;' id='myTable' >"; 
       $output .=  "<thead>"; 
       $output .=   "<tr>"; 
       $output .=    "<th>ID #</th>"; 
       $output .=    "<th>Name</th>"; 
       $output .=    "<th>Address</th>"; 
       $output .=    "<th>T</th>"; 
       $output .=    "<th>Phone</th>"; 
       $output .=    "<th>Mobile</th>"; 
       $output .=    "<th class='text-center'>Contacted</th>"; 
       $output .=   "</tr>"; 
       $output .=  "</thead>"; 
       $output .=  "<tbody>"; 


       while ($record = mysqli_fetch_array($result, MYSQLI_ASSOC)){ 
        $output .= "<tr>"; 
        $output .=  "<td><a href='default.php?page=_clientDetails&id=".$record['clientId']."&mode=edit' style='color: #000;'><span class='pb-clientId'>".$record['clientId']."</span></a></td>"; 
        $output .=  "<td><span class='pb-fullname'>".$record['clientFirstname1']." ".$record['clientLastname1']."</span></td>"; 
        $output .=  "<td>".$record['clientAddress']."</td>"; 
        $output .=  "<td>".$record['clientMailshot']."</td>"; 
        $output .=  "<td>".$record['clientPhone1']."</td>"; 
        $output .=  "<td>".$record['clientMobile1']."</td>"; 

        // Makes a checkbox selected 
        if ($record['clientContacted'] == 'Y'){ 
         $optContacted = ' checked '; 
        } else { 
         $optContacted = ''; 
        } 

        //$output .= "<td class='text-center' ><button id='btn-contacted-".$record['clientId']."' onclick='street.clientContacted(&quot;{$record['clientId']}&quot;,&quot;{$record['clientContacted']}&quot;)' class='btn btn-success'>Contacted</button></td>"; 

        $output   .= "<td align='center'>"; 
        $output   .=  "<input type='checkbox' id='col7-".$record['clientId']."' onclick='contacted(&quot;".$record['clientId']."&quot;);' value='1' ".$optContacted." />"; 
        $output   .= "</td>"; 


        $output .= "</tr>"; 
       } 

       $output .=  "</tbody>"; 
       $output .= "</table>"; 
       $output .= "<br/>"; 

       echo $output; 

      } else { 
       echo "No Clients Found in this street"; 
      } 
     }  

Dann wird der Test JS-Funktion benötigt die MYSQL zu aktualisieren:

function contacted(id) { 
var clientId = id; 
var col7  = "col7-"+clientId; 
var col7value = $("#"+col7).is(':checked'); 
var data  = id+"\n"+col7+"\n"+col7value; 

alert(data); 

//Read checkbox state 
if (col7value =='false'){ 
    contacted = 'N'; 
} else { 
    contacted = 'Y'; 
} 

$.ajax({ 
    type:  "POST", 
    url:  "_backend/_core/_database/update_Phonebank.php", 
    data:  { 
     "id":   clientId, 
     "contacted": contacted 
    }, 
    dataType: "text", 
    success: function(data){ 
    } 
}) 
} 

Ich freue mich, wenn Sie mir helfen können, zu entscheiden, dass meine Funktion nicht das zweite Mal gelesen wird.

+0

Versuchen Sie, eine [MCVE]. Es ist schwer zu sehen, was in deinem Beispiel vor sich geht. Ist das PHP relevant? Können Sie keine reduzierte HTML-Version bereitstellen? – Quentin

+0

Wenn eine Antwort Ihr Problem gelöst hat, ziehen Sie in Betracht, die Antwort zu akzeptieren. Hier ist, wie http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work dann hier zurückkehren und das gleiche mit dem Häkchen/Häkchen, bis es grün wird. Dies informiert die Community, eine Lösung wurde gefunden. Sonst denken andere vielleicht, dass die Frage noch offen ist und möchten vielleicht (mehr) Antworten posten. Sie erhalten Punkte und andere werden ermutigt, Ihnen zu helfen. * Willkommen bei Stack! * –

Antwort

4

Sie definieren eine Funktion:

function contacted(id) { 
    //... 
} 

Aber innerhalb, die funktionieren, Sie die Funktion mit einem Wert überschreiben:

contacted = 'N'; 

Also das nächste Mal, wenn Sie versuchen contacted() Sie aufzurufen versuche eine Saite anzurufen, als ob es eine Funktion wäre.

Ihre Variablen eindeutige Namen geben:

var wasContacted = ''; 
//... 
wasContacted = 'N'; 
// etc. 

Auf diese Weise Sie das Überschreiben nicht Dinge, die Sie nicht wollen, zu überschreiben.

Darüber hinaus mit dem Schlüsselwort var, um Ihre Variablen zu deklarieren wird sie innerhalb dieses bestimmten Bereichs (wie innerhalb dieser Funktion) definieren, anstatt nur auf das Objekt window setzen. (Sie haben können haben Variablen mit dem gleichen Namen in verschiedenen Bereichen, ohne sich gegenseitig zu beeinflussen.)

+0

@ Jonasw: Optional, aber ich stimme zu, es ist sicherlich in diesem Fall empfohlen. – David