Completed
Last Updated: 01 Aug 2025 13:07 by ADMIN

Summary 

After editing an Excel `.xlsx` file using Telerik RadSpreadsheet and saving it via the default Save option, the saved file becomes corrupted. It no longer opens in RadSpreadsheet (throws an error) and shows a repair warning in Microsoft Excel. 

Reproduction Steps 

1. Upload an Excel `.xlsx` file to the `ABC` folder on the server. 

2. Load the file in RadSpreadsheet via a basic viewer page. 

3. Make any small edit (e.g., change a cell’s value). 

4. Click the built-in Save option in the RadSpreadsheet toolbar. 

5. Attempt to: 

   - Reopen the saved file in RadSpreadsheet → Error: Object reference not set to an instance of an object. 

   - Open in Excel → Warning: “We found a problem with some content in ‘filename’. Do you want us to try to recover as much as we can?” 

Files Attached 

- `Original.xlsx` — Before editing, opens fine in both RadSpreadsheet and Excel. 

- `Modified.xlsx` — After saving via RadSpreadsheet, causes errors. 

- Screenshot of: 

   - RadSpreadsheet error : 

Picture 

   - Excel repair prompt 

Picture 

Code Snippet : 

<telerik:RadSpreadsheet ID="sample" runat="server" Visible="false" style="font-size: 10px;" /> 

protected void Page_Load(object sender, EventArgs e) 

{ 

    string fileName = (string)Session["SelectedFileName"]; 

    SheetLoad(fileName); 

} 

  

private void SheetLoad(string fileName) 

{ 

    try 

    { 

        string filePath = Server.MapPath("~/ABC/" + fileName); 

        if (!File.Exists(filePath)) 

        { 

            string errorMsg = "File not found: " + filePath; 

            ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('File not found!');", true); 

            return; 

        } 

  

        // Load spreadsheet using Telerik document provider 

        sample.Provider = new SpreadsheetDocumentProvider(filePath); 

        sample.Visible = true; 

    } 

    catch (Exception ex) 

    { 

        string errorMsg = "Error opening file: " + ex.Message + " | File: " + fileName; 

        ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Error loading file!');", true); 

    } 

} 

  

**Observation:** 

  

* This only happens for **some files**, especially ones that likely contain advanced Excel features. 

* Other simpler files save and reload without any issue. 

  

**Assumption:** 

It seems the default save behavior of RadSpreadsheet is **not preserving some Excel structures**, leading to file corruption on save. 

  

 


Unplanned
Last Updated: 15 Jul 2025 11:39 by ADMIN
Created by: Jacob
Comments: 1
Category: UI for ASP.NET AJAX
Type: Feature Request
0

We were looking to use Telerik’s RadEditor control to provide MS Word like editing provision but lacks some features of MS Word especially Header & Footer options which will be repeated in every page, as the RadEditor control does not support paging. Are we doing it correctly? Is there an option where paging is supported and header and footer will come across pages? Are there any other products that support MS Word editor functionality?

Declined
Last Updated: 24 Jul 2025 06:48 by Matthias
Created by: Matthias
Comments: 5
Category: UI for ASP.NET AJAX
Type: Bug Report
0

Hello Progress team,

we're using the HtmlChart and RadialGauge components of your Telerik for AJAX suite and are encountering some inconsistencies between the two.

To be able to use the exportable SVGs of those components server-side, we've extended your classes and added two asp:HiddenFields each, so we can post the SVG and the dimensions back to the server for further processing. (Setting the values is handled in a button OnClientClick JavaScript function, that's irrelevant to this thread.)

As of 2019, when we first introduced the respective feature in our software, the code looked like this:

  • Similar for both components
  • In both cases the additional HiddenFields get added to the Controls-List "OnInit" before the base.OnInit-event.
  • In both cases we had to override the "Render"-function to also render the HiddenField-Controls to the HTML.
public class ExportableRadHtmlChart : RadHtmlChart, INamingContainer
{
    private HiddenField _svgData = new HiddenField();
    private HiddenField _svgDimensions = new HiddenField();
    public ExportableRadHtmlChart()
    {
        _svgData.ID = "SVGData";
        _svgDimensions.ID = "SVGDimensions";
    }

    protected override void OnInit(EventArgs e)
    {
        Controls.Add(_svgData);
        Controls.Add(_svgDimensions);
        
        base.OnInit(e);
    }
    
    protected override void Render(HtmlTextWriter writer)
    {
        writer.RenderBeginTag(HtmlTextWriterTag.Div);

        base.Render(writer);

        _svgData.RenderControl(writer);
        _svgDimensions.RenderControl(writer);

        writer.RenderEndTag();
    }
}

and

public class ExportableRadRadialGauge : RadRadialGauge, INamingContainer
{
    private HiddenField _svgData = new HiddenField();
    private HiddenField _svgDimensions = new HiddenField();
    public ExportableRadRadialGauge()
    {
        _svgData.ID = "SVGData";
        _svgDimensions.ID = "SVGDimensions";
    }

    protected override void OnInit(EventArgs e)
    {
        Controls.Add(_svgData);
        Controls.Add(_svgDimensions);
        
        base.OnInit(e);
    }

    protected override void Render(HtmlTextWriter writer)
    {
        writer.RenderBeginTag(HtmlTextWriterTag.Div);

        base.Render(writer);

        _svgData.RenderControl(writer);
        _svgDimensions.RenderControl(writer);

        writer.RenderEndTag();
    }
}

With this code, we've been running the Telerik product version 2023.1.323.45.

 

Now, we've updated to Telerik product version 2025.1.416.462 and are experiencing the following inconsistencies:

  1. Using the same code as before, the HiddenFields of class "ExportableRadHtmlChart" render twice:


    Whereas previously, they've only rendered once:

    Removing the custom "Render"-function of the class "ExportableRadHtmlChart" resolves this issue. (Having duplicates of those HiddenFields actually causes issues on repeated PostBacks, as two HiddenFields at a time have the same ClientID and thus their values get packed as a comma separated list before transmission to the server, which in turn yields issues when parsing the SVG, which in reality are multiple comma separated SVGs.

    The SVG values are truncated in this view, but the dimensions paint a pretty clear picture, as to what's happening here after 4 PostBacks.) Despite requiring to make this adjustment to our software, we're glad, we can discard that custom "Render"-function.
  2. The "ExportableRadRadialGauge", on the other hand, still only renders the HiddenFields with the custom "Render"-function included. Can we expect a similar fix to the RadialGauge, s.t. we don't require to render the HiddenFields ourselves?

As I'm unsure of the "Theme name", I've put "ControlDefault". But I don't think that should matter too much. If it does, I'll try to find the correct value.

Kind regards,
Matthias

 


    Completed
    Last Updated: 22 Aug 2025 14:12 by ADMIN
    Release 2025 Q3 SP1
    Created by: Amardeep
    Comments: 1
    Category: UI for ASP.NET AJAX
    Type: Bug Report
    0
    My Web Forms application is using a valid (non-expired) telerik-license.txt file / Telerik Licensing Evidence attribute (Script Key). However, the Telerik AJAX controls still display the invalid license watermark along with a yellow banner that appears empty.
    Completed
    Last Updated: 23 Oct 2025 13:41 by ADMIN
    Release 2025 Q4 (Nov)

    The Box Plot Chart throws the following errors when used:

    RadHtmlChart.js:1 Uncaught ReferenceError: series is not defined
    Uncaught (in promise) ReferenceError: series is not defined

    Completed
    Last Updated: 27 Oct 2025 12:44 by ADMIN
    Release 2025 Q4 (Nov)
    Created by: Alex
    Comments: 1
    Category: UI for ASP.NET AJAX
    Type: Bug Report
    0

    I recently upgraded the Telerik version from 2025.1.416 to 2025.3.825, and started getting this NullReferenceException during debugging.

    I noticed I get the error when debugging RadGrid with the Skin property.

     

    Completed
    Last Updated: 24 Apr 2026 12:28 by ADMIN
    Release 2026 Q2

    The problem is that when you click the buttons, the RadDateRangePicker is filled with the start of 2025-06-01 and the end of 2025-06-30. Then, when you click the button again, a change should occur in the RadDateRangePicker: start of 2025-07-01 and end of 2025-07-31.


    1 step => correct

    2 step => incorrect


    Result
    The first time you click the button, it returns the start date to 06/01/2025 and the end date to 06/30/2025 (this is correct). Clicking it again returns the start date to 06/30/2025 and the end date to 07/31/2025 (this is incorrect).

    Work around
     - Local page
    js code fixed 

    const datepicker = $find('<%= radDateRangePicker2.ClientID %>');
    
    datepicker.set_rangeSelectionStartDate(null);
    datepicker.set_rangeSelectionEndDate(null);


    - Global fixed All controls
    C# in extension control 

    public bool EnableDateResetting
    {
        get => ViewState["EnableDateResetting"] as bool? ?? false;
        set => ViewState["EnableDateResetting"] = value;
    }
    
    public eDateRangePicker() : base()
    {
    	Load += EDateRangePicker_Load;
    }
    
    private void EDateRangePicker_Load(object sender, EventArgs e)
    {
        if (EnableDateResetting)
        {
            RegisterDateResettingScript();
        }
    }
    
    private void RegisterDateResettingScript()
    {
    	string script = $@"
    		Sys.Application.add_load(function() {{
    			const picker = $find('{ClientID}');
    
    			if (picker) {{
    				const origStart = picker.set_rangeSelectionStartDate;
    				const origEnd = picker.set_rangeSelectionEndDate;
    
    				picker.set_rangeSelectionStartDate = function(date) {{
    					if (date !== null && !this._isResetting) {{
    						const currentStart = this.get_rangeSelectionStartDate();
    						const currentEnd = this.get_rangeSelectionEndDate();
                    
    						if (currentStart || currentEnd) {{
    							this._isResetting = true;
    
    							origStart.call(this, null);
    							origEnd.call(this, null);
    
    							this._isResetting = false;
    						}}
    					}}
    
    					return origStart.call(this, date);
    				}};
    
    				picker.set_rangeSelectionEndDate = function(date) {{
    
    					return origEnd.call(this, date);
    				}};
    			}}
    		}});
    	";
    
        ScriptManager.RegisterStartupScript(this, GetType(), $"DateResetting_{ClientID}", script, true);
    }

    Completed
    Last Updated: 04 Dec 2025 12:50 by ADMIN

     

    ChatGPT recommended "Turn off Telerik’s “old” ARIA settings (they are overly strict and often invalid):"

    i removed it and it worked. WTH?

    What i supposed to do now? I added these settings in all our products

     <telerik:RadGrid ID="grdImpacts" runat="server" EnableAriaSupport="true" 
                  style="margin-top:10px;margin-right:25px;margin-left:15px;"
                  ShowStatusBar="true" AutoGenerateColumns="False"
                  Width="650px" skin="WebBlue" 
                  AllowSorting="False" AllowMultiRowSelection="False" AllowPaging="false"
                  OnNeedDataSource="grdMain_OnNeedDataSource">

     

    Unplanned
    Last Updated: 26 Nov 2025 11:31 by ADMIN
    Created by: Yossi
    Comments: 1
    Category: UI for ASP.NET AJAX
    Type: Feature Request
    0

    Hello,

    We see the integration of AI through the AI​​Prompt component within the ASP.Net Core Editor, which enables a smarter and more efficient content creation experience, and we love it. We would be very happy if we could have the same integration for the Ajax Editor as well.

    Thanks in advance
    Yossi
    Completed
    Last Updated: 04 Dec 2025 12:51 by ADMIN

     

    Attached my grid code. Most columns are removed for readability

        <telerik:RadGrid ID="grdChanges" runat="server" Width="1140" 
            skin="WebBlue" style="margin-top:13px; margin-right:13px; outline: 0 !important;"
            ShowFooter="false" AllowSorting="false">      
        <ClientSettings>
                <Scrolling AllowScroll="True" ScrollHeight="487px" UseStaticHeaders="true" />
        </ClientSettings>                      
        <MasterTableView GroupLoadMode="Client" AutoGenerateColumns="False" HeaderStyle-Font-Bold="true"> 
            <HeaderStyle CssClass="InnerHeaderStyle"/>
            <ItemStyle CssClass="InnerItemStyle"/>
            <AlternatingItemStyle CssClass="InnerAlernatingItemStyle"/>
            <CommandItemStyle CssClass="CommandHeaderStyle" />

            <ColumnGroups>
               <telerik:GridColumnGroup Name="Passenger Trips" HeaderText="Passenger Trips" HeaderStyle-HorizontalAlign="Center"/>           
               <telerik:GridColumnGroup Name="Ton Trips" HeaderText="Ton Trips" HeaderStyle-HorizontalAlign="Center"/>                                                         
               <telerik:GridColumnGroup Name="Miles Per Trip" HeaderText="Miles Per Trip" HeaderStyle-HorizontalAlign="Center"/>           
               <telerik:GridColumnGroup Name="Miles Per Hour" HeaderText="Miles Per Hour" HeaderStyle-HorizontalAlign="Center"/>                          
            </ColumnGroups> 

            <Columns> 

                <telerik:GridNumericColumn DataField="MilesPerHour_Proj" HeaderText="Project"  
                                           ColumnGroupName ="Miles Per Hour"
                                           DataFormatString="{0:N1}" DecimalDigits="0"
                                           HeaderStyle-HorizontalAlign="Center" 
                                           HeaderStyle-Width="60px" ItemStyle-BackColor="White"
                                           ItemStyle-HorizontalAlign="Right" AllowRounding="true" />

                <telerik:GridNumericColumn DataField="MilesPerHour_Base" HeaderText="Base"  
                                           ColumnGroupName ="Miles Per Hour"
                                           DataFormatString="{0:N1}" DecimalDigits="0"
                                           HeaderStyle-HorizontalAlign="Center" 
                                           HeaderStyle-Width="60px" ItemStyle-BackColor="White"
                                           ItemStyle-HorizontalAlign="Right" AllowRounding="true" />                            

                <telerik:GridNumericColumn DataField="MilesPerHourChange" HeaderText="Change"  
                                           ColumnGroupName ="Miles Per Hour"
                                           DataFormatString="{0:N1}" DecimalDigits="0"
                                           HeaderStyle-HorizontalAlign="Center" 
                                           HeaderStyle-Width="60px" ItemStyle-BackColor="White"
                                           ItemStyle-HorizontalAlign="Right" AllowRounding="true" />
            </Columns> 

            <NoRecordsTemplate> 
                <div style="padding: 5px"> 
                    No records available. 
                </div> 
            </NoRecordsTemplate> 

        </MasterTableView> 
        <FilterMenu EnableTheming="True"> 
            <CollapseAnimation Duration="200" Type="OutQuint" /> 
        </FilterMenu> 
    </telerik:RadGrid> 

                    
    Pending Review
    Last Updated: 11 May 2026 09:49 by Lars
    Created by: Lars
    Comments: 0
    Category: UI for ASP.NET AJAX
    Type: Feature Request
    0

    There is significant latency when a user has many images in a list or dropdown list, particularly those with sub-choices that also have images.  Because of this, we tried implementing design-time templates to allow lazy loading of images for RadComboBox.  While implementing a solution is possible, it was much more complicated than expected.

    We have previuisly raised a feature request for simular controls that was fixed (Thanks for that) but our topp prioority component is The combobox. see Allow lazy loading of images with design-time templates for ListBox and ComboBox

    D
    uring the discussion a few questions was rasied from telerik:

    Currently, the ComboBox has the Load on Demand functionality which focuses on loading items as needed, but it does not specifically address lazy loading of images inside the templates. Before proceeding further, I’d like to confirm your current setup to suggest the best approach:

    • Are you using server-side or client-side data binding with RadComboBox?
    • Are you using design-time templates or injecting templates dynamically?
    • How are images currently loaded in your ComboBox items?
    • Is your main concern the initial load time, scrolling performance, or something else?

    Reasons (Hope it makes sense)

    • Only server-side databinding (with both controls).

    • We are using both ItemTemplate with custom images (where we then control lazy loading ourselves) and ImageUrl where we lose this possibility and have issues. We also dynamically load custom controls (ITemplate) in a few places.

    The issue is that having many images in a combobox breaks TTI with the page if the images take some time to load. This problem vanishes completely when we use ItemTemplate and add loading="lazy" to our images. In our large applications, it would be very time consuming (and cause some other issues) to use ItemTemplate everywhere though, and we would like to be able to just set ImageUrl for example when creating a RadComboBoxItem manually. 

     

    Completed
    Last Updated: 29 Jun 2026 11:31 by ADMIN
    Release 2026 Q2 SP1

    I'm using a RadTab and one of the RadPageViews starts with an RadAsyncUpload-Control. When I use arrow keys to select this tab and try to use the Tab-Key to focus the next element (the RadAsyncUpload in this case) nothing happens. If any other control (like a textbox) is placed above my upload control there is no problem focusing it.

    You can see this in the attached Demoproject when using arrow keys to select to RpvUpload.

    Pending Review
    Last Updated: 13 Aug 2026 14:49 by Mrinal

    After upgrading to 2026.2.708, RadAsyncUpload file uploads fail with HTTP 403 Forbidden originating from the new CSRF validation (AsyncUploadHandler.ValidateCsrfToken). The handler returns an HTML error response.

    The failure occurs only in our multi-host (load-balanced) environment. In multihost environment as well Issue is inconsistent. The exact same build works correctly on a single-node local/dev machine.

    Refer support ticket raise for the Issue to get more detail.

    RadAsyncUpload fails with HTTP 403 (ValidateCsrfToken) in multi-node/web-farm environment after upgrade to 2026.2.708 | View Ticket | Your Account

    Completed
    Last Updated: 31 Aug 2026 07:22 by ADMIN
    Release 2026 Q3 SP1

    Regression introduced in: 2025.4.1111

    When RadEditor is in HTML mode, calling get_html() without parameters modifies self-closing tags in the returned content.

    According to the documented API behavior, the RadEditor client filters should modify the returned content only when the isFiltered argument is set to true. However, the content is currently passed through browser DOM serialization even when filtering is not requested. This normalizes HTML void elements and removes the XHTML self-closing slash.

    Steps to reproduce

    1. Add a RadEditor to a page.
    2. Switch the editor to HTML mode.
    3. Enter the following content:
    <img alt="" src="image.png" />
    1. Call editor.get_html() or editor.get_html(false).

    Actual result

    The returned markup is modified and the self-closing slash is removed:

    <img alt="" src="image.png">

    Expected result

    When filtering is not requested, the content entered in HTML mode should be returned without filter-related DOM serialization:

    <img alt="" src="image.png" />

    Calling editor.get_html(true) may modify the returned content according to the enabled RadEditor client filters.

    Impact

    Applications that store, compare, validate, or further process XHTML-compatible markup may receive content different from the source entered by the user. This can affect integrations that rely on self-closing tag syntax.

    Completed
    Last Updated: 02 Sep 2026 14:59 by ADMIN
    Release 2026 Q3 SP1
    Created by: paavon
    Comments: 1
    Category: UI for ASP.NET AJAX
    Type: Bug Report
    0

    Telerik UI for ASP.NTE AJAX nuget package adds ChartImage handler configs to Web.Config (system.web/httpHandlers and system.webServer/handlers) even though it does not support RadChart any more.

    Also it seems to mess system.webServer/handlers configuration by adding remove actions for other Telerik handlers AFTER add actions.

    system.web/httpHandlers before:

        <httpHandlers>
          <add path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" validate="false" />
          <add path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" validate="false" />
          <add path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" validate="false" />
          <add path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" validate="false" />
        </httpHandlers>
    

    system.web/httpHandlers after:

        <httpHandlers>
          <add path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" validate="false" />
          <add path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" validate="false" />
          <add path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" validate="false" />
          <add path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" validate="false" />
        <add path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" validate="false" /></httpHandlers>
    

    system.webServer/handlers before:

        <handlers>
          <add name="Telerik_Web_UI_SpellCheckHandler_axd" path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" preCondition="integratedMode" />
          <add name="Telerik_Web_UI_DialogHandler_aspx" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" preCondition="integratedMode" />
          <add name="Telerik_RadUploadProgressHandler_ashx" path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" preCondition="integratedMode" />
          <add name="Telerik_Web_UI_WebResource_axd" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" preCondition="integratedMode" />
        </handlers>
    

    system.webServer/handlers after:

        <handlers>
          <add name="Telerik_Web_UI_SpellCheckHandler_axd" path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" preCondition="integratedMode" />
          <add name="Telerik_Web_UI_DialogHandler_aspx" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" preCondition="integratedMode" />
          <add name="Telerik_RadUploadProgressHandler_ashx" path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" preCondition="integratedMode" />
          <add name="Telerik_Web_UI_WebResource_axd" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" preCondition="integratedMode" />
        <remove name="ChartImage_axd" /><remove name="Telerik_Web_UI_SpellCheckHandler_axd" /><remove name="Telerik_Web_UI_DialogHandler_aspx" /><remove name="Telerik_RadUploadProgressHandler_ashx" /><remove name="Telerik_Web_UI_WebResource_axd" /><add name="ChartImage_axd" path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" preCondition="integratedMode" /></handlers>
    

     

    Completed
    Last Updated: 08 Sep 2026 13:05 by ADMIN

    Summary When a RadPane has Scrolling="Y" (or X/Both) and also has BorderWidth, BorderStyle, BorderColor set (either directly on the pane or via the parent RadSplitter's PanesBorderSize), the pane's inner scrollbar does not render/work correctly. The space reserved for the scrollbar remains in the layout, but the scrollbar itself is missing or non-functional, effectively making the pane's content unscrollable.

    Steps to Reproduce

    1. Create a RadSplitter with a RadPane that has Scrolling="Y" and BorderWidth="3" BorderStyle="solid" BorderColor="blue" (or just rely on PanesBorderSize).
    2. Add enough content to the pane so it overflows vertically.
    3. Load the page in Chrome (reproduced on Chrome 152).
    4. Observe: only the outer document scrollbar appears; the pane's own scrollbar is missing or the reserved scrollbar gutter space is empty, and the content cannot be scrolled within the pane.

    Expected behavior The pane's scrollbar should render correctly and remain functional regardless of BorderWidth/BorderStyle/BorderColor/PanesBorderSize settings.

    Actual behavior Scrollbar space is reserved but the scrollbar is missing/non-functional when a border is applied to the pane.

    In Development
    Last Updated: 10 Sep 2026 09:42 by ADMIN
    Scheduled for 2026 Q3 SP1
    Created by: Sitecore IT
    Comments: 0
    Category: UI for ASP.NET AJAX
    Type: Bug Report
    0
    Telerik's embedded jQuery bootstrap code was changed so that it now unconditionally reassigns window.$ (and window.jQuery) whenever window.jQuery is undefined, with no check on whether window.$ is already occupied by another library (e.g. Prototype.js, MooTools, or any framework that defines a global $ without defining a global jQuery). This directly reproduces the reported symptom (element.dispatchEvent is not a function inside Prototype's fire()).