Radeditor set_html работает, но выдает ошибку javascript, которая останавливает остальную часть функции
У меня есть таблица, которая содержит несколько полей ввода, которые представляют пользовательские теги в 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>
Для информации Javascript-функция resizeMe просто так:
var radeditor = null;
function resizeMe(editor, args){
radeditor = editor;//
radeditor.setSize('712', (($('#modal-holder').height()) * 0.85).toString());
}
1 ответ
Я решил эту проблему. Он частично лежал с 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)
Глядя на строку в ScriptResource, на которую ссылалась моя страница FootDesign: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 Solution
на RadEditor мой OnClientSelectionChange
атрибут указывает на функцию javascript $page.setdirty
который не существовал на этой странице, но существовал на странице, я скопировал RadEditor, добавив эту функцию на свою локальную страницу, удалил ошибку и позволил странице продолжить работу.
Итак, правило здесь, проверьте, что все соответствующие функции JavaScript существуют. и используйте вышеупомянутый метод для устранения подобных ошибок.