2011-06-15 275 views
0

我有一個小的評論系統,我已經修改並嘗試實施到網站中。它在'阿賈克斯'。當帶有HTML的jQuery嵌入到頁面中時,評論系統可以正常工作 - 即當用戶點擊提交按鈕時,代碼返回「false」,停止頁面刷新並提交數據。但是當我在我的網站中實現代碼並將其放置在單獨的.js文件中時,代碼出於某種原因無法正常工作。我的意思是 - onclick刷新後的頁面。爲什麼 ?代碼根本沒有改變 - 當它自己的時候,它的工作原理,但不是在index.php網站實施時。我嘗試將輸入類型更改爲「按鈕」,並從onclick調用函數 - 頁面不刷新,但也沒有插入輸入。我沒有意識到爲什麼會這樣。下面的代碼:頁面刷新點擊ajax

$(document).ready(function() { 
     $(".submit").click(function() { 
      var name = $("#name").val(); 
      var email = $("#email").val(); 
      var comment_area = $("#comment_area").val(); 
      var dataString = 'name=' + name + '&email=' + email + '&comment_area=' + comment_area; 
      var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
      var emailaddressVal = $("#email").val(); 
      if (name == '' || !emailReg.test(emailaddressVal) || comment == '') { 
       alert('Please enter valid data and type in message'); return false; 
      } 
      else { 
       $.ajax({ 
        type: "POST", 
        url: "comments.php", 
        data: dataString, 
        cache: false, 
        success: function (html) { 
         $("#com_list").append(html); 
         $("#com_list").fadeIn("slow"); 
         $("#flash").fadeOut('fast'); 

        } 
       }); 
      } return false; 
     }); 
    }); 
//END 
//COM LIST 

//HTML/PHP 
<div class="slider"> 
<form id="comment_form" name="comment_form" method="post" action="#"  
enctype="multipart/form-data"> 
<input type="text" id="name" name="name" maxlength="16"/>&nbsp;Name<br /><br/> 
<input type="text" id="email" name="email"/>&nbsp;Email&nbsp;(will not show)<br /><br/> 
<textarea id="comment_area" name="comment_area" maxlength="1000"></textarea><br /><br/> 
<input type="submit" class="submit" name="submit_comment" value="submit"/>&nbsp;& 
nbsp;comment or <a href="index.php" id="cancel" 
onmousedown="$('.slider').hide();$('#com_list').show();"><u>cancel</u></a> 
</form> 
</div> 

//comments.php

if($_POST) { 
$name=$_POST['name']; 
$email=$_POST['email']; 
$comment_area=$_POST['comment_area']; 
//$lowercase = strtolower($email); 
//$image = md5($lowercase); 
$insert = mysqli_query($connect,"INSERT INTO comments (name,email,comment,com_date) 
VALUES ('$name','$email','$comment_area',curdate())"); 

} 

////////////////

感謝您的任何建議..

+0

你確定你正在包含該文件嗎? – Patricia 2011-06-15 14:33:25

+0

嗨。是的 - 我絕對樂觀。 .js文件包含在帶有腳本標籤的index.php中。我在索引中也只有一種形式。PHP的 - 和代碼的作品,但問題是關於輸入類型='提交' - 點擊它刷新頁面,而不是返回false。 – 2011-06-15 14:36:16

+0

我也嘗試在index.php頭標籤內實現jQuery代碼。同樣的事情 - 刷新頁面.. – 2011-06-15 14:38:13

回答

3

aha!

有一個在您的js錯誤:

在我的控制檯我得到 「的評論沒有定義」

if(name=='' || !emailReg.test(emailaddressVal) || comment=='') 

和更早您有:

var comment_area = $("#comment_area").val(); //<-- 

改變這發表評論,至少它會過去。

編輯:一點背景。當firefox遇到錯誤時,有時會吞下它,並且在錯誤發生後停止運行任何javascript,因此返回false和/或阻止默認代碼不會觸發,所以它仍然會發布表單並刷新頁面。

+0

給我一秒,請.. – 2011-06-15 19:22:51

+0

@Patricia - 你太棒了......!簡直不敢相信我跳過了這樣一個小而明顯的錯誤。誠然,在comments.php中也修正了「評論」問題。非常感謝你們,特別是你們帕特麗夏。 – 2011-06-15 19:33:05

+0

我的榮幸:)覺得感覺上漲並將此標記爲答案:)所以這個問題不會出現在沒有答案的列表中! 很高興我可以幫到 – Patricia 2011-06-15 19:35:55

1

保持你那該死的代碼乾淨,所以你能理解你做飯...... 這會爲你工作:

$(document).ready(function(){ 
    $("#comment_form").submit(function(e){ 
     e.preventDefault(); // stop refresh 

     var name = $("#name").val(); 
     var email = $("#email").val(); 
     var comment_area = $("#comment_area").val(); 
     var dataString = 'name='+ name + '&email=' + email + '&comment_area=' + comment_area+'&submit_comment=true'; 
     var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
     var emailaddressVal = $("#email").val(); 
     if(name=='' || !emailReg.test(emailaddressVal) || comment==''){ 
      alert('Please enter valid data and type in message'); 
     } else{ 
      $.ajax({ 
       type: "POST", 
       url: "comments.php", 
       data: dataString, 
       cache: false, 
       success: function(html){ 
        $("#com_list").append(html); 
        $("#com_list").fadeIn("slow"); 
        $("#flash").fadeOut('fast'); 
       } 
      }); 
     } 
    }); 
    $('#cancel').click(function(e){ 
     e.preventDefault(); 
     $('.slider').hide(); 
     $('#com_list').show(); 
    }); 
}); 

下面是一些更乾淨的代碼...

<div class="slider"> 
    <form id="comment_form" name="comment_form" method="post" action="#" enctype="multipart/form-data"> 
     <input type="text" id="name" name="name" maxlength="16"/>&nbsp;Name<br /><br/> 
     <input type="text" id="email" name="email"/>&nbsp;Email&nbsp;(will not show)<br /><br/> 
     <textarea id="comment_area" name="comment_area" maxlength="1000"></textarea><br /><br/> 
     <input type="submit" class="submit" name="submit_comment" value="submit"/>&nbsp;&nbsp;comment or <a href="index.php" id="cancel"><u>cancel</u></a> 
    </form> 
</div> 

下面是一些其他清潔和SECURE代碼

<?php 
if(isset($_POST['submit_comment'])){ 
    $name   = mysql_real_escape_string($_POST['name']); 
    $email   = mysql_real_escape_string($_POST['email']); 
    $comment_area = mysql_real_escape_string($_POST['comment_area']); 
    //$lowercase = strtolower($email); 
    //$image  = md5($lowercase); 
    $query = 'INSERT INTO comments (name,email,comment,com_date) '. 
       "VALUES ('$name','$email','$comment_area',CURDATE())"; 
    $insert = mysqli_query($connect, $query); 
} 
?> 
+0

哇...給我一秒檢查出來.. – 2011-06-15 14:43:31

+0

呃?不會不會他的表單沒有.comment_form這個類,它的id和name是comment_form。 – Patricia 2011-06-15 14:44:28

+0

猜猜看 - 它不工作...它仍然刷新,並且不會返回錯誤輸入的彈出窗口..(但那是很容易修復)所以?有趣的是不是嗎? – 2011-06-15 14:49:12

2

改變這一行:

$(".submit").click(function() { 

要這樣:

$("#comment_form").submit(function() { 

submit事件被觸發的<form>元素上,而不是在提交按鈕。

+0

我猜這是一個錯字,你的意思是$(「form#comment_form」)。submit(function(){' – jeroen 2011-06-15 14:45:53

+2

$(「form#comment_form」)。不需要ID的形式,實際上是一個較慢的選擇器,然後#comment_form。id選擇器是最快的! 另外:表單點擊不是他想要附加的行爲,這將有一些非常奇怪的結果 – Patricia 2011-06-15 14:46:22

+0

我編輯答案,納入以上評論的建議 @jeroen謝謝,這是一個錯字,我太急了,我猜。 @patricia謝謝你的提示,你是對的,ID選擇器更快。 – justis 2011-06-15 17:03:58