2013-12-20 31 views
2

我有一个包含一些输入框,代表了RadEditor内自定义标签表,像这样:Radeditor set_html工作,但抛出停止函数的其余部分JavaScript错误

(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. 

OK按钮的点击,文本被替换,并在其中输入了该值的表应该被隐藏。 在radeditor.set_html(x)行中使用下面的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开发者工具)。

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

回答

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引用在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]); 
     } 
    } 

判明它被翻倒在上面的代码中的[名称]变量,这正好是selectionChange

TL; DR解决方案

在RadEditor我OnClientSelectionChange属性指向JavaScript函数$page.setdirty这并没有此页面上存在,但在页面上存在我复制了RadEditor从加入此功能到我的本地页面,删除了错误,并允许页面继续工作。

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

相关问题