javascript代码的奇怪问题

时间:2012-10-16 11:01:37

标签: javascript jquery encoding

我有一个简单的代码:

$(document).ready(function(){
    $(".button").click(function(){
        var f = $(this).closest('form');
        if(f != null){
            $(f).append('<div class="loadmask"></div>');                        
        }
    });
});

正如您所看到的,我想在父表单中附加一个带有'loadmask'类的div。这里奇怪的事情$(f).append('<div class="loadmask"></div>');已被编码为$(f).append("<div class="loadmask"></div>&#34;);并引发了javascript错误。

更新

我已将代码更改为

$(document).ready(function(){           
            $(".button").click(function(){
                $(this).parent('form').append("<div class='loadmask'></div>");
            });
         });

仍然出现javascript错误:

SyntaxError: missing ) after argument list
[Break On This Error]   

$(this).parent('form').append("<div class="loadmask"></div>&#34;);

并在eclipse控制台:

00:57:17,593 ERROR [MinifierUtil:108] 22: 65: missing ) after argument list
00:57:17,593 ERROR [MinifierUtil:108] 22: 79: unterminated string literal
00:57:17,593 ERROR [MinifierUtil:108] 1: 0: Compilation produced 2 syntax errors.
00:57:17,593 ERROR [MinifierUtil:74] JavaScript Minifier failed for  


         $(document).ready(function(){          
            $(".button").click(function(){
                $(this).parent('form').append("<div class="loadmask"></div>&#34;);
            });
         });

我使用eclipse Juno(使用UTF-8编写ecoding项目),liferay 6.1 ga-1和jsf-2.0,icefaces-3 ....

3 个答案:

答案 0 :(得分:2)

我无法重现你的问题。我怀疑是由于某种原因,JavaScript文件中编码的其他字符由jQuery表示为&#34;&#34恰好是the entity for quotation mark"),因此请确保您在代码中没有将其作为额外内容。尝试清理JavaScript源文件,然后重试。

另请注意,closest永远不会返回null。如果未找到form元素,则返回空列表(可以通过在无形页面上运行代码轻松验证)。因此,您可以安全地将代码编写为:

$(document).ready(function(){
    $(".button").click(function(){
        $(this).closest('form').append('<div class="loadmask"></div>');
    });
});

请参阅此小提琴获取证据:http://jsfiddle.net/p48Rb/3/

答案 1 :(得分:1)

尝试使用if (f.length),因为$(this).closest('form')会返回一个长度为&gt;的jQuery对象。 0(表单是第一个元素)或不(长度0计算为falsy)。换句话说,f永远不会是null

答案 2 :(得分:1)

我真的不知道为什么,但似乎我的xhtml(jsf2.0)无法解码脚本代码中的html char。

(&amp;&amp;&amp;&amp;运算符上的符号会引发相同的错误)

只需更改

$(this).parent('form').append("<div class="loadmask"></div>");$(this).parent('form').append("div").addClass("loadmask");

并使用&amp;,使用子语句if而不是&amp;&amp;将解决它的问题。