2016-12-27 186 views
0

在php類中我定義了一個表格,它顯示了需要聯繫的客戶端列表。在第7欄中,我已經集成了一個複選框,因此當用戶呼叫客戶端時,他/她會打勾進入該複選框。Javascript函數只運行一次

的問題是,在JS函數運行第一時間,然後它說第二次:如default.php頁= _PhoneBankingP1:1未捕獲的ReferenceError:接觸時沒有定義(...)

的模塊使用如下所列:

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){ 
    } 
}) 
} 

如果您能幫助我決定我的功能未被第二次讀取,我將不勝感激。

+0

嘗試提供[mcve]。在你的例子中很難看到發生了什麼。 PHP是相關的嗎?你不能提供它生成的HTML的減少版本嗎? – Quentin

+0

如果答案解決了您的問題,請考慮接受答案。以下是http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work然後返回到此處,並使用勾號/複選標記執行相同操作,直至變爲綠色。這告知社區,找到了解決方案。否則,其他人可能會認爲這個問題仍然存在,並且可能需要發佈(更多)答案。您將獲得積分,其他人將被鼓勵幫助您。 *歡迎使用Stack!* –

回答

4

你定義一個函數:

function contacted(id) { 
    //... 
} 
內該功能

,你覆蓋的功能與價值:

contacted = 'N'; 

因此,下一次你嘗試調用contacted()你'正在嘗試調用一個字符串,就像它是一個函數一樣。

給你的變量唯一名稱:你不希望覆蓋

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

這樣你不覆蓋的東西。

此外,使用var關鍵字聲明您的變量將在該特定範圍內(例如在該函數內)定義它們,而不是將它們放在window對象上。 (您可以在不同範圍內具有相同名稱的變量而不會相互影響)。

+0

@Jonasw:可選,但我同意在這種情況下推薦使用。 – David