2013-05-02 161 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