替换或删除javascript

时间:2013-06-16 03:06:36

标签: javascript jquery smarty civicrm

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

<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。它是editrow-birth_date div,大多数以前的javascript用于它,因为它使用jQuery UI datepicker。有趣的是,只需在文件末尾添加相同的javascript和jQuery就可以正常工作,直到我只需要.wrapAll。然后它似乎试图在原始的javascript中再次运行一些东西并生成一个新的错误并退出。

我完全被困在这里,我甚至不知道如何正确解释我的想法。有没有办法我可以动态删除代码中的原始javascript,以便它不能再执行?我不这么认为,但我希望我觉得这样可以解决我的问题。

1 个答案:

答案 0 :(得分:1)

Wrap将所有HTML拉出页面,并将其粘贴到用于wrapAll的param构建的HTML中,然后将整个软件包粘贴回页面,这意味着您将相同的脚本文件重新打印到页面上假设。每当脚本标记被放入页面时,它的所有JS都会执行。现在我要编辑并提出一些其他的建议,当我认为wtf正在使用这个应用程序,但这是你的奖金解雇的问题。

其他:

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

但无论如何,如果你不能控制至少大部分的HTML,那就抓住它并用它来打人,直到他们承诺停止制作可怕的技术选择并恢复对你的HTML控制权。应该使用该死的HTML和JavaScript来运行。

或者向他们展示这个。我已经六年了。不应该允许这些问题发生。剥夺我们对自己应用程序控制权的技术会像纸球一样被弄皱,然后扔在肩膀上,因为你永远不会得到那么多时间。