---
slug: "mezzanine-blogpost-confirm-in-editing"
title: "Display a Warning When Attempting to Navigate Away with Unsaved Changes in Django Mezzanine's TinyMCE"
description: "If you are using version 4 of tinyMCE, you can add an onChange event in the setup option of tinyMCE.init."
url: "https://www.ytyng.com/en/blog/mezzanine-blogpost-confirm-in-editing"
publish_date: "2022-08-06T02:09:52Z"
created: "2022-08-06T02:09:52Z"
updated: "2026-02-27T04:58:15.796Z"
categories: ["Django"]
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/caded73d761245f5a442e0ce9de9b4ef.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "en"
---

# Display a Warning When Attempting to Navigate Away with Unsaved Changes in Django Mezzanine's TinyMCE

<p>If the version of tinyMCE is 4, you can add an onChange event using the setup option in tinyMCE.init.</p>
<p></p>
<p>templates/admin/blog/blogpost/change_form.html</p>
<pre>{% <span>extends </span><span>'admin/change_form.html' </span>%}<br />{% <span>block </span><span>content </span>%}<br />  {{ <span>block</span>.<span>super </span>}}<br /><br />  &lt;<span>script</span>&gt;<br />  <span>　</span><span>/// </span><span>Page navigation confirmation<br /></span><span>    </span><span>window</span>.<span>addEventListener</span>(<span>'beforeunload'</span>, (event) =&gt; {<br />      <span>/// window.tinyMCEContentChanged </span><span>is defined in</span><span> tinymce_setup.js </span><span>and becomes true<br /></span><span>      </span><span>/// </span><span>when the content of the editor is changed.<br /></span><span>      </span><span>if </span>(<span>tinyMCEContentChanged</span>) {<br />        event.<span>returnValue </span>= <span>'</span><span>Are you sure you want to navigate away from this page?</span><span> Unsaved changes will be lost.</span><span>'</span>;<br />      }<br />    });<br />    <span>/// </span><span>No navigation warning when the submit button is clicked<br /></span><span>    </span><span>$</span>(<span>'</span><span>input</span><span>[</span><span>type</span><span>="submit"]'</span>).<span>click</span>(<span>function</span>() {<br />      <span>tinyMCEContentChanged </span>= <span>false</span>;<br />    });<br />  &lt;/<span>script</span>&gt;<br />{% <span>endblock </span>%}</pre>
<p></p>
<p>static/js/tinymce_setup.js</p>
<pre><span>var </span><span>language_codes </span>= {<br />    <span>'ar'</span>: <span>'ar'</span>,<br />    ...<br />    ...<br />};<br /><br />...<br />...<br /><br /><span>// </span><span>Becomes True with the editor's change event.<br /></span><span>// </span><span>Warn on page navigation<br /></span><span>let </span><span>tinyMCEContentChanged </span>= <span>false</span>;<br /><br /><span>jQuery</span>(<span>function </span>($) {<br /><br />    <span>if </span>(<span>typeof </span><span>tinyMCE </span>!= <span>'undefined'</span>) {<br /><br />        <span>tinyMCE</span>.<span>init</span>({<br />            <span>selector</span>: <span>"textarea.mceEditor"</span>,<br />            <span>height</span>: <span>'500px'</span>,<br />            ...<br />            ...<br />            // Add setup<br /><span><span>            // https://www.tiny.cloud/docs-4x/configure/integration-and-setup/<br /></span>            </span><span>setup</span>: <span>function </span>(editor) {<br /><span>                </span>editor.<span>on</span>(<span>'change'</span>, <span>function </span>(e) {<br />                    <span>console</span>.<span>log</span>(<span>'tinyMCEOnChange'</span>);<br />                    <span>tinyMCEContentChanged </span>= <span>true</span>;<br />                });<br />            }<br />        });<br />    }<br />});</pre>
<p></p>
