2

我有一个表,其中包含许多输入框,这些输入框代表 RadEditor 中的自定义标签,如下所示:

(td:0)      (td:1)
Foo value : [______________]
Bar value : [______________]
            [OK]

这些用于替换 RadEditor 中的文本持有者,例如:

Lorem ipsum dolor sit amet, [Foo] consectetur adipiscing elit. 
Nulla ultrices dolor [Foo] ipsum, sit amet venenatis massa mollis at. 
Aliquam id fringilla [Bar]. Curabitur massa erat, feugiat.

单击确定按钮后,文本被替换,输入值的表应被隐藏。使用以下 javascript 代码

$('.populate-fields').click(function(e){
    e.preventDefault();
    var criteria = [];
    $('#<%= tableCriteria.ClientID %> tbody .js-criteria-row').each(function(index, el){
        var crit = {};
        crit.field = $(el).find('td:eq(0)').text();
        crit.value = $(el).find('td:eq(1) :input').val();
        criteria.push(crit);
    });
    var x = radeditor.get_html(true);
    $.each(criteria, function(index, value){
        var regex = new RegExp("\\["+value.field.toLowerCase()+"\\]", "gi");
        x = x.replace(regex, value.value);
    });
    radeditor.set_html(x);
    $('#<%= tableCriteria.ClientID %>').hide();
});

内容被替换,但随后出现以下错误(在 chrome 开发人员工具中)radeditor.set_html(x)

Uncaught TypeError: Property '0' of object [object Array] is not a function VM333:6
(anonymous function) VM333:6
Telerik.Web.UI.RadWebControl.raiseEvent VM333:908
Type.callBaseMethod VM333:6
b.RadEditor.raiseEvent VM333:10347
(anonymous function) VM333:11720
b

VM333 Line 6文件中的以下代码在哪里MicrosoftAjax.js

Function.__typeName="Function";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var ..........[trimmed]

由于这个错误,这$('#criteria-table').hide();行代码永远不会运行。

页面的 aspx 文件,基本上由这个组成

<telerik:RadScriptManager ID="RadScriptManager1" runat="server" EnableScriptCombine="true" ScriptMode="Release" OutputCompression="AutoDetect" ></telerik:RadScriptManager>

<asp:Table id="tableCriteria" runat="server" cellpadding="5" cellspacing="3" />
<telerik:RadEditor runat="server" ID="letterRadEdit" ToolbarMode="Default" EditModes="Design,Html" OnClientCommandExecuting="$pcmis._editor_command" 
    ToolsFile="~/App_Data/Editor.xml" Width="718px" EnableResize="false" EnableEmbeddedSkins="true" OnClientLoad="resizeMe" Skin="Windows7" OnClientSelectionChange="$page.setdirty" ContentFilters="DefaultFilters" EnableEmbeddedBaseStylesheet="true">
    <ExportSettings OpenInNewWindow="true" FileName="letter.pdf" />
    <SpellCheckSettings DictionaryLanguage="en-GB" AllowAddCustom="false" />
    <Languages>
        <telerik:SpellCheckerLanguage Code="en-GB" Title="English (UK)" />
    </Languages>
    <CssFiles>
        <telerik:EditorCssFile Value="/assets/css/radeditor.default.css" />
    </CssFiles>
</telerik:RadEditor>

有关信息resizeMe javascript 函数就是这样:

var radeditor = null;
function resizeMe(editor, args){
    radeditor = editor;//
    radeditor.setSize('712', (($('#modal-holder').height()) * 0.85).toString());
}
4

1 回答 1

0

我已经解决了这个问题。它部分与 RadScriptManager 相关,部分与 RadEditor 相关,大部分与我相关。RadEditor 的代码是从另一个有效的页面复制的。并将 RadScriptManager 更改为

<telerik:RadScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug" EnableEmbeddedjQuery="false" EnableScriptCombine="false" OutputCompression="AutoDetect"  ></telerik:RadScriptManager>

给我所有可读格式的javascript文件,调用堆栈为:

Uncaught Sys.InvalidOperationException: Sys.InvalidOperationException: Handler must be a function. ScriptResource.axd?d=z1j_eIkK4k91chMXx6nE6-OfQLfnfrzs-Xz1PXAu-rAigATL2C-Xu6Brfy2IdZxyqf7fYB2wE2tvDP…:222
Error$create ScriptResource.axd?d=z1j_eIkK4k91chMXx6nE6-OfQLfnfrzs-Xz1PXAu-rAigATL2C-Xu6Brfy2IdZxyqf7fYB2wE2tvDP…:222
Error$invalidOperation ScriptResource.axd?d=z1j_eIkK4k91chMXx6nE6-OfQLfnfrzs-Xz1PXAu-rAigATL2C-Xu6Brfy2IdZxyqf7fYB2wE2tvDP…:372
Sys$Component$create ScriptResource.axd?d=z1j_eIkK4k91chMXx6nE6-OfQLfnfrzs-Xz1PXAu-rAigATL2C-Xu6Brfy2IdZxyqf7fYB2wE2tvDP…:2723
(anonymous function) FootDesign.aspx:418
(anonymous function) ScriptResource.axd?d=z1j_eIkK4k91chMXx6nE6-OfQLfnfrzs-Xz1PXAu-rAigATL2C-Xu6Brfy2IdZxyqf7fYB2wE2tvDP…:2399
Sys$_Application$_doInitialize ScriptResource.axd?d=z1j_eIkK4k91chMXx6nE6-OfQLfnfrzs-Xz1PXAu-rAigATL2C-Xu6Brfy2IdZxyqf7fYB2wE2tvDP…:4280
(anonymous function)

查看从我的页面 FootDesign:418 引用的 ScriptResource 中的行

if (events) {
        for (var name in events) {
            if (!(component["add_" + name] instanceof Function)) throw new Error.invalidOperation(String.format(Sys.Res.undefinedEvent, name));
            if (!(events[name] instanceof Function)) throw new Error.invalidOperation(Sys.Res.eventHandlerNotFunction);
            component["add_" + name](events[name]);
        }
    }

原来是在上面代码中的 [name] 变量上掉了下来,恰好是selectionChange

TL;DR 解决方案

在 RadEditor 上,我的OnClientSelectionChange属性指向$page.setdirty 此页面上不存在但存在于页面上的 javascript 函数,我将 RadEditor 从添加此函数的过程中复制到我的本地页面,删除了错误,并允许页面继续工作。

所以规则在这里,检查所有相关的javascript函数是否存在。并使用上述方法调试类似错误。

于 2013-12-20T12:15:27.943 回答