2017-01-10 17 views
1

を実行しているとき、私は基本的に、あなたは、現時点ではjQueryの関数は、PHPスクリプト

を「アップ投票」ボタンをクリックすると、それはので、私は

clients.php

を持って作っています定義されていないと言っています
<?php 

$clientInfo = "SELECT * FROM Clients ORDER BY Client ASC"; 
$stmt = sqlsrv_query($conn, $clientInfo); 

echo "<div style='width: 100%; display: inline-block;'>"; 

while ($client = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) 
{ 
    echo "<div class='clientid' style='height: 50px; font-size: 18px; vertical-align: middle; display: inline-block; width: 100%'>" . 

      " 
      <div style='width: 35%;'></div> 

      <div onclick=\"voteUp()\" style='display: inline-block; width: 5%;'>  
       <span style='font-size: 20px;' class='hover-cursor fa fa-chevron-up vote-up'></span> 
      </div>" . 

       "<div class='hover-cursor hvr-underline-reveal' style='width: 20%; display: inline-block;' data-clientid='{$client['ClientID']}'>" . $client['Client'] . "</div>" . 

      "<div onclick=\"voteDown()\" style='display: inline-block; width: 5%;'> 
       <span style='font-size: 20px; text-align: right;' class='hover-cursor fa fa-chevron-down vote-down'></span> 
      </div> 

      <div style='width: 35%;'></div> 

     </div> 
     <br />"; 
} 

echo "</div>"; 

?> 

上記のように、voteUp()関数のonclickがあります。私のページの一番下にある

私は

<script type="text/javascript" src="scripts/scripts.js"></script> 

scripts.jsには持って

(私は、PHPファイルを実行するためのdivをクリックする上でのチュートリアルからvoteUp()のためのビットを得ました)
$(document).ready(function() 
{ 
    $('.pull-me').click(function() 
    { 
     $('.panel1').slideToggle('fast') 
    }); 
    $('.pull-me').click(function() 
    { 
     $('.panel2').slideToggle('fast') 
    }); 
    $('.pull-me').click(function() 
    { 
     $('.panel3').slideToggle('fast') 
    }); 

    $("#selection-box1").change(function() 
    { 
     document.location.href = $(this).val(); 
    }); 

    $(".output").click(function() 
    { 
     var noteid = $(this).data("noteid"); 
     var templatenoteid = $(this).data("templatenoteid"); 
     var variablenoteid = $(this).data("variablenoteid"); 

     if ($(this).data("noteid")) 
     { 
      $("#right-box").load("noteContent.php", {noteid: noteid}); 
     } 

     else if ($(this).data("templatenoteid")) 
     { 
      $("#right-box").load("templateNoteContent.php", {templatenoteid: templatenoteid}); 
     } 

     else 
     { 
      $("#right-box").load("variableContent.php", {variablenoteid: variablenoteid}); 
     } 
    }); 


    var modal = document.getElementById('login-box'); 

    window.onclick = function(event) 
    { 
     if (event.target == modal) 
     { 
      modal.style.display = "none"; 
     } 
    } 

    //This script votes up and down for the client 

    function voteUp() 
    { 
     $.get("voteup.php"); 
     return false; 
    } 

    function voteDown() 
    { 
     $.get("votedown.php"); 
     return false; 
    } 

}); 

そして最後にでvoteup.php

<?php include 'connectionDetails.php'; ?> 

<?php 

if (isset($_POST['clientid'])) 
{ 
    $voteup = "UPDATE Clients SET Pos = (SELECT MAX(Pos) FROM Clients) + 1 WHERE ClientID = " . $_POST['clientid']; 

    $stmt = sqlsrv_query($conn, $voteup); 
} 
else 
{ 
    echo "No ClientID"; 
} 

?> 

私は「にReferenceErrorを:voteUpが定義されていません」と言ってコンソールにエラーが出るのはなぜ私はonclickの=「voteUp()」

とDIVで投票Upボタンをクリックして

+0

スクリプトを正しく組み込んでいますか? –

+0

私の全体の表示ページ(clients.php)http://pastebin.com/Zk5TPxb3 はい、フォルダと場所は正しい – MagicRecon

答えて

2

あなたが持っていますメソッドをスコープで指定します。

代わりに、どの場所からでもアクセスできるようにウィンドウにアタッチすることができます。

window.voteUp = function() 
{ 
    $.get("voteup.php"); 
    return false; 
} 

window.voteDown = function() 
{ 
    $.get("votedown.php"); 
    return false; 
} 
+0

こんにちは、これは私の答えを解決するように私は答えますが、私はちょうど何も何も起こらない、なぜ私は私のデータベースをチェックしても、列の値は同じですが、エラーがなくなってコンソールからの唯一のフィードバック"GET xhr" voteup.php "ですが何らかの理由で私のクエリに当たっていません – MagicRecon

+0

$ .get呼び出しを送信しているので、$ .post呼び出しとclient_idなどのデータが必要です。これは' if (isset($ _ POST ['clientid'])) ' – squiroid

0

Why do I get an error in the console saying "ReferenceError: voteUp is not defined"

スコープ。

voteUp()voteDown起動ブロックで定義されている($(document).ready(function() ...{}内ので、このブロックの外側では使用できませんあなたが外の二つの機能を移動する必要があり

:。

$(document).ready(function() { 
    ... 
}); 

function voteUp() 
{ 
    $.get("voteup.php"); 
    return false; 
} 

function voteDown() 
{ 
    $.get("votedown.php"); 
    return false; 
} 
+0

@JayBlanchard私はその質問の妥当性についてはわかりません。 Document readyは、DOMの準備が整ったらイベントを初期化するためのものです。この場合のように、再利用可能な関数を定義するためのものではありません。 –

+0

@JayBlanchardこれは(後の)受け入れられた答えとまったく同じです。私はあなたのコメントで混乱しています。 –

+0

@JayBlanchard私はあなたがそれを言っているのに驚いています。 function()ブロック内で宣言された関数は、その関数ブロックにスコープされます。それらはその機能ブロックの外から呼び出すことはできません。それらは、そのファンクションブロックで定義されたイベントから呼び出すことができますが、ここではそうではありません(ただし、イベントの宣言方法をリファクタリングすることをお勧めします)。例:https://jsfiddle.net/dqxcw95t/(チェックコンソール) –

1

なぜインラインJSの代わりにjQueryを使用しないのですか?あなたのdivのクラスを与えます。そして、

<div class="voteup" data-clientid="{$client['ClientID']}">...</div> 

、それは非常にクリーンなように代わりonclick()のjQueryのを使用します。

$(document).on('click', '.voteup', function(){ 
    var clientid = $(this).data('clientid'); 
    $.get("voteup.php", { clientid: clientid }); 
    return false; 
}) 

すでに与えて、これはあなたのマークアップクリーナーを維持するのに役立ちますjQueryのを使用しているので、あなたはあなたのマークアップとあなたのJavaScriptにもっと簡単に変更を加えることができます。

さらに、スコープの問題がなくなるため、名前空間を追加する必要がありません。

他の唯一の問題は、$_POST['clientid']をvoteup.phpに渡していないということです。クエリが実行されることはありません。あなたはdiv宣言でdata-client-idを含めることができますが、ことをあなたのPHPでテストを変更する必要があります。

if (isset($_GET['clientid'])) 

あなたがGETリクエストwwithに沿って値を送信されるように。

関連する問題