javascript - Radeditor set_html 工作但抛出一个 javascript 错误停止该功能的其余部分

标签 javascript jquery vb.net telerik radeditor

我有一个表格,其中包含许多代表 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();
});

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

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 6MicrosoftAjax.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());
}

最佳答案

我已经解决了这个问题。它部分取决于 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 引用的 ScriptResource 中的行:418

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 属性指向 javascript 函数 $page.setdirty 它在这个页面上不存在,但在我的页面上存在将 RadEditor 从 添加此功能复制到我的本地页面,删除错误,并允许页面继续工作。

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

关于javascript - Radeditor set_html 工作但抛出一个 javascript 错误停止该功能的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20700578/

相关文章:

javascript - 内联 javascript 与 IE 不同

javascript - 单击 javascript 按钮时添加媒体

vb.net - 在文本中高效地存储 GUID?

javascript - D3.js 旋转形状而不旋转内部文本

javascript - 更改页面加载时的 URL 参数

javascript - 如何用纯 JavaScript 重写这个 jQuery 搜索过滤功能?

javascript - jQuery 更改用户的 img

javascript - javascript 中的 .all 或 Jquery 中的 .all 替代品是什么

vb.net - 如何在 VB.NET 中声明 COM 可见的默认索引属性?

c# - 如何计算字符串中的Enter?