1

我有一个简单的代码:

$(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 编码项目)、liferay 6.1 ga-1 和 jsf-2.0、icefaces-3 ....

4

3 回答 3

2

我无法重现您的问题。我怀疑由于某种原因,在您的 JavaScript 文件中编码了一个附加字符,该字符&#34;由 jQuery 表示。&#34恰好是引号( ") 的实体,因此请确保您的代码中没有将其作为额外内容。尝试清理您的 JavaScript 源文件,然后重试。

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

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

请参阅此小提琴以获得证明:http: //jsfiddle.net/p48Rb/3/

于 2012-10-16T11:05:22.000 回答
1

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

于 2012-10-16T11:06:15.033 回答
1

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

(&& 运算符上的 & 符号将引发相同的错误)

只是改变

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

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

于 2013-03-13T03:12:10.270 回答