2013-05-02 160 views
0

我已經成功地在PHP中使用foreach語句顯示多個Div(divs顯示來自數據庫的不同行),並且每個Div都在其底部有一個窗體,其按鈕喚起下面的javascript onclick函數。將標記ID從PHP傳遞到javascript

function SubmitForm(msg) { 
var cid = $("#cid").val(); 
var message = $("#"+msg).val(); 

$.post(
"picturecomments.php", { cid: cid, message: message }, function(data)  
{alert(data);} 
); 
} 

及以下的形式

<form action="picturecomments.php" method="post"> 
<span > 
<input type="hidden" name="cid" id="cid" value="',$result['id'],'"required="required"/> 
<textarea name="'.$message.'" id="'.$message.'" style="width:85%; height:25px; 
margin:0px;" placeholder="give a comment" required="required"></textarea> 
<input type="button" onclick="SubmitForm('.$message.');" 
id="searchForm"style="width:5%; height:25px; margin:0px;" value="Send"/> 
</span> 
</form> 

我的問題是,當我嘗試點擊發送按鈕,就經常聽第一個div, 所以我已經注意到這個問題是因爲我只有一個ID爲這些標籤,當腳本運行時,它只發現第一個ID ...

我該如何讓該函數運行多個ID? 因爲當我有2個的div,該功能將只能聽第一種形式提交

在$消息變量相同的PHP代碼中,我做我的研究,但我沒能找到一個解決方案

請幫忙!!

+5

難道他們都具有相同的ID?一個id應該是唯一的。 – jah 2013-05-02 00:15:48

+0

提交該ID以及消息到SubForm? SubmitForm('。$ result [「id」]。','。$ message。'); – shapeshifter 2013-05-02 00:16:41

+1

您應該使用類,因爲它們可以應用於多個元素。然後使用jquerys,而不是本傑明的回答 – jah 2013-05-02 00:34:03

回答

0

你可以每個使用jquery。假設你有多個div,其中有「post」類

<div class="post"> 
    <input type="text" class="cid"> 
    <textarea class="msg"></textarea> 
</div> 
<div class="post"> 
    <input type="text" class="cid"> 
    <textarea class="msg"></textarea> 
</div> 


$(".post").each(function(index) { 
    $.post("picturecomments.php", { cid: $(this).find('cid').val(), message: $(this).find('textarea').val() }, function(data) { 
     alert(data); 
    }); 
}); 

因此,它將基本上循環遍歷所有具有班級職位的div。找到類=「cid」/ class =「msg」的輸入字段,然後將其發送到您的php處理器。

當然,這是非常基本的,但你會走出它的路!

http://api.jquery.com/each/

BTW:請確保您不使用的ID。他們應該是獨一無二的!

+0

謝謝,我糾正了類? ID的問題..但點擊發送按鈕,我得到的警報等於可用的Div的數量..說在文本區域沒有什麼...即使我輸入所有的! – Jay 2013-05-02 01:06:06

+0

Jep,我注意到了。我編輯了代碼。消息應該是$(this).find('textarea')。val()我的不好,抱歉! – 2013-05-02 10:07:29

0

您根本不需要使用ID,只需在每個表單中使用名稱並對其進行序列化即可。

我還會刪除嵌入式javascript(和css ...)以及硬編碼的$message,因爲如果將它放在上面,您將永遠無法更改原始郵件。

也沒有理由在每種形式中爲消息使用不同的name屬性。

您還需要防止默認/正常的html表單提交。

PHP/HTML

<form action="picturecomments.php" method="post"> 
    <span > 
    <input type="hidden" name="cid" value="' . htmlspecialchars($result['id']) . '" required="required"/> 
    <textarea name="message" placeholder="give a comment" required="required"></textarea> 
    <input type="button" value="Send"/> 
    </span> 
</form> 

的javascript:

$("form").on("submit", function(e) { 
    e.preventDefault(); 
    $.post(
    "picturecomments.php", 
    $(this).serialize(), 
    function(data) { 
     alert(data); 
    }); 
} 
+0

沒有任何反應,當我點擊發送按鈕,iam假設其無法喚起javascript代碼... 所以我把上面的代碼,並把它放在一個命名的JavaScript函數,然後我把它作爲一個onclick按鈕標記.. 。但仍然沒有任何反應 – Jay 2013-05-02 01:09:33

+0

@EmmanuelMatsiyana你使用的是什麼版本的jQuery?在ersion 1.7中添加了jQuery的'on()'。 – jeroen 2013-05-02 14:01:37