使用Lift将div添加到HTML正文

时间:2010-08-06 11:39:19

标签: javascript dom scala lift

我最近一直在玩Scala / Lift / Comet / Ajax等。我遇到了一个问题归结为:

摘要

我想在特定事件发生时更新特定的div(按ID)。如果div尚不存在,则必须创建它并将其附加到HTML正文。

目前,在使用Lift框架时,我无法使用它。

源文件

LIFT_PROJECT / SRC /主/ web应用/静态/ mouseViewTest.html:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
        // <![CDATA[
        $(document).ready(function() {
            updateOrCreateMouseDiv('123', 'coords')
        });

        function updateOrCreateMouseDiv(uniqueId, coords) {
            if ($('#mouse_'+uniqueId).length == 0) {
                $('body').append('<div id=' + uniqueId + '>' + coords + '</div>');
            }

            $('#mouse_'+uniqueId).html(coords)
        }
        // ]]>
    </script>
</head>
<body></body>
</html>

错误

如果我直接在浏览器(file:///LIFT_PROJECT/src/main/webapp/static/mouseViewTest.html)中打开上述文件,则可以正常工作,即创建新的div

但如果我通过Lift / Jetty(http://localhost:8080/static/mouseViewTest)运行它,我会收到以下JavaScript错误:

铬:

Uncaught Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7

Firefox(Firebug):

An invalid or illegal string was specified" code: "12

比较浏览器中的来源

在比较浏览器中的页面源时,我只能看到一个区别,即:Lift在结束</body>标记之前添加以下JavaScript:

<script type="text/javascript" src="/ajax_request/liftAjax.js"></script>    
<script type="text/javascript">
// <![CDATA[
var lift_page = "F320717045475W3A";
// ]]>
</script>

问题

有谁知道为什么会这样?

如果我想将JavaScript代码移动到Scala文件中(使用Lift的JavaScript和jQuery支持),代码会是什么样的?

请注意:当我使用Jq("body") ~> JqAppend()创建新div时,它可以正常工作。我只是不知道如何检查div id是否已经存在。这就是为什么我将代码移动到模板中,计划使用Lift的Call函数来执行JS函数。当这些问题开始时就是这样......

谢谢!

1 个答案:

答案 0 :(得分:1)

我最近遇到了类似的问题,而且从我收集的问题来看,问题是因为提升服务的页面被用作XHTML,如果页面是XHTML,则写入DOM时会出现一些问题HTML。我不知道这是不是jQuery或Safari的错误,或者它只是XHTML中不可能的东西,但修复它的一个快速方法是修改你的Boot.scala告诉Lift不要使用XHTML作为mime类型用这一行:

LiftRules.useXhtmlMimeType = false