0

我有一些通过 URL 自动生成的 HTML 和 javascipt。这个 html 和 javascipt 是使用 Smarty 模板生成的。不幸的是,生成的这段代码使用了一堆 jQuery,但对 jQuery 库的引用不包含在代码中,因此会产生错误。我无法改变这一点。下面是生成错误“未捕获的引用错误:cj 未定义”的 javascript 的第一部分的示例

<script type="text/javascript"> cj( function() { var element_date = "#birth_date_display";var element_time = "#birth_date_time";var time_format = cj( element_time ).attr('timeFormat'); cj(element_time).timeEntry({ show24Hours : time_format, spinnerImage: '' }); var currentYear = new Date().getFullYear();var alt_field = '#birth_date';cj( alt_field ).hide();var date_format = cj( alt_field ).attr('format');var altDateFormat = 'mm/dd/yy'; switch ( date_format ) { case 'dd-mm': case 'mm/dd': altDateFormat = 'mm/dd'; break; }

不过,我能做的是将代码添加到文件的末尾。所以我能够加载相关的库并再次输入相同的 javascript 代码,它工作正常。

我遇到的问题是,事后我也在尝试使用 jQuery 对页面进行一些样式设置。下面的行给了我这个问题。一切都很好,但我的javascript文件只是在这一行退出,

 $("#editrow-email-Primary, #editrow-phone-1-1, #editrow-birth_date").wrapAll("<div class='grid-group personal' />");

再次出现相同的错误“未捕获的引用错误:未定义 cj。以前的大多数 javascript 都用于 editrow-birth_date div,因为它使用 jQuery UI 日期选择器。有趣的是,只需在文件末尾附加相同的 javascript 和 jQuery 就可以了,直到我只添加 .wrapAll。然后它似乎试图在原始 javascript 中再次运行某些东西并生成一个新错误并退出。

我完全被困在这里,我什至不知道如何正确解释我的想法。有没有一种方法可以让我从代码中即时删除原始的 javascript,使其无法再执行?我不这么认为,但我希望这样可以解决我的问题。

4

1 回答 1

1

Wrap 将所有 HTML 从页面中拉出,并将其粘贴到由 wrapAll 的参数构建的 HTML 中,然后将整个捆绑包重新粘贴到页面上,这意味着您将相同的脚本文件重新粘贴到我假设的页面上。每当将脚本标记放入页面时,它的所有 JS 都会执行。现在,当我发现 wtf 正在使用此应用程序时,我将进行编辑并提出其他建议,但这是您的奖金触发问题。

额外的:

好吧,所以我不知道 Smarty 是什么。每当我看到一个与 Smarty 相关的问题时,都会发生一些可怕的事情,所以我什至不想知道。如果您对应用程序有任何控制权,您应该能够在 jQuery 发生之前添加脚本标签。理想情况下,在附加此标签之前。至少,在发生这种情况之前添加一个名为 cj 的空函数以避免错误,然后确定真正的 cj 在哪里,以便您可以将其重新插入。

但是无论如何,如果您至少无法控制大部分 HTML,请拿一根棍子用它打人,直到他们承诺停止做出可怕的技术选择并恢复对 HTML 的控制权,这个人应该正在使用该死的 HTML 和 JavaScript 来运行。

或者给他们看这个。我已经在这六年了。不应允许此类问题发生。剥夺我们对自己应用程序控制权的技术会像纸球一样被揉成一团,扔到你的肩膀上,因为你永远不会回到那个时代。

于 2013-06-16T03:18:25.393 回答