【问题标题】:Javascript and jQuery problem using .append() function使用 .append() 函数的 Javascript 和 jQuery 问题
【发布时间】:2011-10-16 20:49:15
【问题描述】:

我在使用 jQuery 的 .append 函数在 Grails .gsp 中附加 div 时遇到问题。问题是我试图附加的 div 是一个 RichUI 星级块,它是在我使用标签时以编程方式编写的。代码如下:

Grails .gsp 中的代码:

var textToInsert = [];
textToInsert[1] = '<tr><td>';
textToInsert[2] = artistData.name;
textToInsert[3] = '</td><td><div id="artist2"><richui:rating dynamic="true" id="2" units="5" rating="0"  controller="rating" action="rate"/></div></td></tr>';

$j('#recommendedList').append(textToInsert.join(''));

而生成的html正是这样的:

var textToInsert = [];
                textToInsert[1] = '<tr><td>';
                textToInsert[2] = artistData.name;
                textToInsert[3] = '</td><td><div id="artist2"><div id='r3a44146338e7d18384c9233cb7f7bb82'>
<div class='ratingblock'>  
 <div id='unit_longr3a44146338e7d18384c9233cb7f7bb82'>
  <ul id='unit_ulr3a44146338e7d18384c9233cb7f7bb82' class='unit-rating' style='width: 150px'>
    <li id='r9cd7abbd875dc72e67c84180c5b41704' class='current-rating' style='width: 0px;'>Currently 0.0</li>
    <li><a href="/Ontourtest/rating/rate/2?rating=1" onclick="new Ajax.Updater('r3a44146338e7d18384c9233cb7f7bb82','/Ontourtest/rating/rate/2',{asynchronous:true,evalScripts:true,parameters:'rating=1'});return false;" class="r1-unit rater" title="1">1</a></li>
    <li><a href="/Ontourtest/rating/rate/2?rating=2" onclick="new Ajax.Updater('r3a44146338e7d18384c9233cb7f7bb82','/Ontourtest/rating/rate/2',{asynchronous:true,evalScripts:true,parameters:'rating=2'});return false;" class="r2-unit rater" title="2">2</a></li>
    <li><a href="/Ontourtest/rating/rate/2?rating=3" onclick="new Ajax.Updater('r3a44146338e7d18384c9233cb7f7bb82','/Ontourtest/rating/rate/2',{asynchronous:true,evalScripts:true,parameters:'rating=3'});return false;" class="r3-unit rater" title="3">3</a></li>
    <li><a href="/Ontourtest/rating/rate/2?rating=4" onclick="new Ajax.Updater('r3a44146338e7d18384c9233cb7f7bb82','/Ontourtest/rating/rate/2',{asynchronous:true,evalScripts:true,parameters:'rating=4'});return false;" class="r4-unit rater" title="4">4</a></li>
    <li><a href="/Ontourtest/rating/rate/2?rating=5" onclick="new Ajax.Updater('r3a44146338e7d18384c9233cb7f7bb82','/Ontourtest/rating/rate/2',{asynchronous:true,evalScripts:true,parameters:'rating=5'});return false;" class="r5-unit rater" title="5">5</a></li>
   </ul>
  </div>
 </div>
</div></div></td></tr>';

$j('#recommendedList').append(textToInsert.join(''));

Firebug 给出错误:missing ;声明前textToInsert[3] = '&lt;/td&gt;&lt;td&gt;&lt;div ...='r3a44146338e7d18384c9233cb7f7bb82'&gt;

我的猜测是,richui 标记写入不带分号的换行符时,会产生 javascript 错误,但我不确定。

有什么办法可以解决这个问题吗? 非常感谢!

【问题讨论】:

  • 动态标记使用单引号而不是双引号似乎是您的问题。字符串过早结束。 '&lt;/td&gt;&lt;td&gt;&lt;div id="artist2"&gt;&lt;div id='r3a44146338e7d18384c9233cb7f7bb82'&gt; &lt;div class='ratingblock'&gt; 应改为 '&lt;/td&gt;&lt;td&gt;&lt;div id="artist2"&gt;&lt;div id="r3a44146338e7d18384c9233cb7f7bb82"&gt; &lt;div class="ratingblock"&gt;,特别注意 id 和类标识符。
  • @f0x:这是正确的,因此必须更改评级组件中的代码,以便可以在字符串中使用它。

标签: javascript jquery grails-plugin


【解决方案1】:

这意味着这一行有错误(以及以下所有行,我没有全部复制):

textToInsert[3] = '</td><td><div id="artist2"><div id='r3a44146338e7d18384c9233cb7f7bb82'>

我认为错误在于您没有转义单引号。你可以使用双引号:

textToInsert[3] = '</td><td><div id="artist2"><div id="r3a44146338e7d18384c9233cb7f7bb82">'

如果你想保留单引号,你需要转义它们:

textToInsert[3] = '</td><td><div id="artist2"><div id=\'r3a44146338e7d18384c9233cb7f7bb82\'>

【讨论】:

  • 是的,但问题是这些行是由RichUI插件产生的。我不知道如何修改它们,或者是否可能。
猜你喜欢
  • 2010-10-10
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 2011-07-12
相关资源
最近更新 更多