2016-12-27 10 views
0

PHPクラスの中で私は連絡が必要なクライアントのリストを表示するテーブルを定義しています。 7列目では、チェックボックスを統合しているので、ユーザーがクライアントに電話をかけたときに、このチェックボックスにチェックが入ります。ページ= _PhoneBankingP1 default.php:1キャッチされないにReferenceError:?Javascript関数は1回だけ実行されます

問題はJS関数は、初めてとそれが言う後、第2回実行されることで連絡が定義されていない(...)

モジュールで

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"; 
      } 
     }  

そしてMYSQL更新するために必要な試験JS関数である:

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){ 
    } 
}) 
} 
使用は、以下に列挙する

あなたが私の機能が2度目に読み込まれていないと判断するのを助けることができれば、私は感謝します。

+0

[mcve]を提供してください。あなたの事例で何が起こっているのかを見るのは難しいです。 PHPの関連性はありますか?あなたが生成するHTMLのカットダウンバージョンを提供できませんか? – Quentin

+0

答えがあなたの問題を解決した場合は、答えを受け入れることを検討してください。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-workがここに戻って、ティック/チェックマークで緑色に変わるまで同じことを行う方法があります。これはコミュニティに通知し、解決策が見つかりました。そうでない場合、他の人は質問がまだ開いていると思うかもしれませんし、(もっと)回答を投稿したいかもしれません。あなたはポイントを獲得し、他の人はあなたを助けることを奨励されます。 * Welcome to Stack!* –

答えて

4

あなたは関数を定義する:内

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

しかしその関数、あなたが値を持つ機能を上書き

contacted = 'N'; 

あなたがcontacted()あなたを起動しようとするので、次回文字列を関数のように呼び出そうとしています。あなたが上書きしたくないものを上書きしていない

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

その方法:

はあなたの変数に固有の名前を付けます。

さらに、varキーワードを使用して変数を宣言すると、windowオブジェクトにそれらを配置するのではなく、その特定のスコープ内で(その関数内などで)変数を定義します。 (の変数は、異なるスコープで互いに影響することなく同じ名前を持ちます)。

+0

@Jonasw:オプションですが、この場合は必ずお勧めします。 – David

関連する問題