BUG (v0.16.41): Button component with draggable property is not working properly
I guess you're doing something wrong, how do you create those components and their properties?? You shouldn't even see those attributes in the inspector.
Read full answer below ↓Question
Version: v0.16.41
Are you able to reproduce the bug from the demo?
[ ] Yes [ ] No
What is the expected behavior? When we have a button with the property data-gjs-draggable in false, this button not should be dragged in the canvas.
Describe the bug detailed Steps
- Set a button component with draggable property in false
- Drag the button inside other components
- the button is dragged
What is the current behavior? Steps
- Set a button component with draggable property in false
- Drag the button inside other components
- the button not should be dragged
Are you able to attach screenshots, screencasts or a live demo?
[ ] Yes (attached a video )
Answers (4)
I guess you're doing something wrong, how do you create those components and their properties?? You shouldn't even see those attributes in the inspector.
@artf In our codes we have not changed anything. The only difference is that we update the GrapesJs version. Before I had version v0.16.18 and it worked correctly, but now we update GrapesJs to v0.16.41 and it doesn't work for buttons.
we set the properties with this:
editor.getSelected().attributes.attributes["data-gjs-editable"] = 'false'
editor.getSelected().attributes.attributes["data-gjs-copyable"] = 'false'
editor.getSelected().attributes.attributes["data-gjs-droppable"] = 'false'
editor.getSelected().attributes.attributes["data-gjs-draggable"] = 'false'
editor.getSelected().attributes.attributes["data-gjs-resizable"] = 'false'
editor.getSelected().attributes.attributes["data-gjs-stylable"] = 'false'
this way was working perfectly for v0.16.18
Thanks for reporting this, @marcepoblet.
The issue with BUG (v0.16.41): Button component with draggable property is not working properly appears to be a race condition or state management timing problem. This typically happens when component lifecycle events and DOM modifications overlap, creating an inconsistent state.
What to try:
- Add a setTimeout wrapper to ensure the DOM has settled:
setTimeout(() => {
// your operation here
}, 0);
-
Check initialization order — make sure components are fully loaded before you interact with them
-
Use the editor's event system — listen to completion events:
editor.on('component:mount', (component) => {
// safe to interact with component here
});
Recommended next steps:
- Test with the latest GrapesJS version if you haven't
- Provide a minimal reproducible example (CodeSandbox) — this helps the team identify the root cause faster
- Include GrapesJS version, browser, and console errors in your report
Related Questions and Answers
Continue research with similar issue discussions.
Issue #4255
The initial toolbar move button does not get removed if you set the draggable prop to false programmatically
GrapesJS version[X] I confirm to use the latest version of GrapesJSWhat browser are you using? Chrome v98.0.4758.80Reproducible demo link h...
Issue #3655
The form button name changes are not getting captured in generated html code
Version: Version 0.17.19(grapesjs) Version 0.1.11(grapesjs-preset-webpage) Are you able to reproduce the bug from the demo?[ ] No What is t...
Issue #3166
Problem with copy and paste a node
*Version:0.16.27 Are you able to reproduce the bug from the demo? [ ] Yes [ ] No What is the expected behavior? In the right panel and canv...
Issue #3579
RTE misplaced when opened right after dropping `activeOnRender` component
Version: 0.17.4 Are you able to reproduce the bug from the demo?[x] Yes[ ] No Steps to reproduce:Go to the demoDrop a "Text" block inside t...
Paid Plugins That Match This Issue
Curated by issue keywords and label relevance to help you ship faster.
Loading paid plugin recommendations...
Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.
Browse free plugins →Premium plugins ship with support, regular updates, and production-ready features — save days of integration work.
Browse premium plugins →Related tutorials
In-depth guides on the same topic.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
Big Updates: TinyMCE 8 and Placeholder 2.0 for GrapesJS
In May we shipped major updates to two of our most popular GrapesJS plugins — TinyMCE Inline Text Editor and Placeholder.
Tutorial
Find the Right GrapesJS Plugin in Seconds: Smarter Discovery Is Live
We're shipping a set of discovery upgrades. New label filters, a proper compatibility switch for GrapesJS vs Studio, one-click and a smarter sort bar.
Browse Plugin Categories
Jump directly to plugin category pages on the marketplace.