Issue #3200💬 AnsweredOpened December 20, 2020by sprklinginfo0 reactions

Help needed: Get the component that a block being dropped onto?

快速解答by artf

Sorry mate, but here I reply only to your main questionIf I drag and drop a block on a dynamically added component, how can I get/access the component that the block is dropped onto? all other things seem too much confusing to me and honestly off-topic (I think Stack Overflow is a better place to ask layout issues wit...

Read full answer below ↓

Question

Hello,

If I drag and drop a block on a dynamically added component, how can I get/access the component that the block is dropped onto?

I set dragMode to 'absolute' (design mode) so users can freely drop a block anywhere on pages with a background image for each page. The pages are dynamically added when the editor is initiated. Blocks should be dropped on different parts of a page according to the background image. The blocks are positioned 'absolute' due to the dragMode. My problem is that if I change the size of the browser, the pages with the background images are scaling accordingly, but those blocks won't move along with the targeted image. I am thinking I need to change the position to 'relative' once the block is dropped and append it to the page (image). tried with the event 'block:drag:stop' to change the style of the dropped block, but it becomes invisible, it is still on the DOM but I can't see it anymore, 'set 'z-index' to 100000, doesn't work. I also could not figure out how to get/access the pages (dynamically added components) which the blocks being dropped onto so I actually append the block to be children of the page, not at the sibling of the page. Your help or suggestions are greatly appreciated.

Answers (3)

artfDecember 30, 2020

Sorry mate, but here I reply only to your main question

If I drag and drop a block on a dynamically added component, how can I get/access the component that the block is dropped onto?

// block and component are 2 different things, if you don't understand it, please read the documentation
editor.on(`block:drag:stop`, (component, block) => {
  // if component exists, means the drop was successful
  if (component) {
    component.addStyle({ color: 'red' }) // eg. update the style
    // Do you need the parent who contains this new added component??
    const parent = component.parent();
    // ...
  }
})

all other things seem too much confusing to me and honestly off-topic (I think Stack Overflow is a better place to ask layout issues with HTML/CSS)

inthismachineFebruary 16, 2023

@artf is there a way to wrap <mj-text>xxx</mj-text> inside a mj-section and mj-column if it is dropped illegally? Like if the user tried to drop it on the body. Reason is I would like to auto add a dropped text block in to a 1 column row if it is not dropped inside a column.

ClaudeCodeMay 17, 2026

Thanks for reporting this, @sprklinginfo.

Great question about Help needed: Get the component that a block being dropped onto?. The recommended approach with StyleManager is to use the event-driven API.

Start here:

  1. Check the GrapesJS documentation for your specific module
  2. Look for the on() event listener method
  3. Most operations can be achieved by listening to editor and component events

Common patterns:

// Listen for changes
editor.on('change', () => console.log('something changed'));

// Component lifecycle
editor.on('component:mount', (c) => console.log('component ready', c));
editor.on('component:update', (c) => console.log('component updated', c));

If you're still stuck:

  • Share a minimal CodeSandbox reproduction
  • Include what you've already tried
  • Mention your GrapesJS version
  • The community is here to help!

Related Questions and Answers

Continue research with similar issue discussions.

Paid Plugins That Match This Issue

Curated by issue keywords and label relevance to help you ship faster.

View all plugins

Loading paid plugin recommendations...

Free option

Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.

Browse free plugins →
Premium option

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.

All tutorials →

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.