0

我正在用 php 开发一个像 facebook 这样的社交网站。我有一个页面用于显示带有两个链接的用户消息,即replydelete收件箱中每条消息的右下角。我的问题是,当我单击回复链接时,应该出现另一个 html 块,用户可以将回复发送回发件人。我已经编写了这样的代码

<div class="msgutil">
   <a href="" id="reply" onclick="return post_reply()" >reply</a>//this method does'nt works

   <a href="delete_message.php?msg_id=<?php echo $row_msg_id;?>">delete</a> //dont check this
</div><!--end msgutil-->

我已经像这样在 post_reply() 中插入了 html 文档

  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
 </script>

<script type="text/javascript">
function post_reply()
 {
    $("<form id="msgreply" name="msgreply" action="#"> <textarea name="replyfield"    id="replyfield"></textarea> </form>").insertBefore("#reply");
return true;
 }
 </script>

我不知道为什么它不起作用。

4

2 回答 2

3

您在用双引号组成的字符串中使用双引号。这是无法做到的,因为您不断地结束并再次开始字符串。

要么用单引号括起来:

$('<form id="msgreply" name="msgreply" action="#"> <textarea name="replyfield" id="replyfield"></textarea></form>').insertBefore("#reply");
//^                                                                                                              ^

或转义双引号:

$("<form id=\"msgreply\" name=\"msgreply\" action=\"#\"> <textarea name=\"replyfield\" id=\"replyfield\"></textarea></form>").insertBefore("#reply");
//          ^         ^       ^         ^         ^  ^                  ^           ^     ^           ^

您还可以使用以下 HTML:

<div class="msgutil">
   <a href="#" id="reply">reply</a>
   <a href="delete_message.php?msg_id=<?php echo $row_msg_id;?>">delete</a>
</div><!--end msgutil-->

和以下javascript:

$(document).ready(function() {
    $("#reply").click(function(e) {
        $('<form id="msgreply" name="msgreply" action="#"> <textarea name="replyfield" id="replyfield"></textarea></form>').insertBefore("#reply");
        e.stopPropagation();
        e.preventDefault();
    });
});​

得到相同的结果。

这是一个 JSFiddle 演示。

于 2012-12-27T10:38:36.983 回答
0

我认为您应该使用 jQuery 遵循更好的方法,如下所示:

HTML:

<div class="msgutil">
   <a href="" id="reply">reply</a>

   <a href="delete_message.php?msg_id=<?php echo $row_msg_id;?>">delete</a>
</div><!--end msgutil-->​

jQuery:

$("#reply").click(function(e){
    e.preventDefault();
    var formHtml = '<form id="msgreply" name="msgreply" action="#"> <textarea name="replyfield"    id="replyfield"></textarea> </form>';
    $(this).before(formHtml);
});

演示 ​</p>

于 2012-12-27T10:45:14.937 回答