Bug Tracker

Opened 5 years ago

Closed 4 years ago

#9134 closed bug (duplicate)

wrapInner causes scripts in body to be run twice

Reported by: Nicholai Burton <nicholai.burton@…> Owned by: gibson042
Priority: high Milestone: 1.next
Component: manipulation Version: 1.6
Keywords: Cc:
Blocked by: #11795 Blocking:

Description

If wrapInner is called from within the body of a page, it runs itself twice, and any other scripts in the body run twice regardless of where wrapInner is run. Consider this code snippet to duplicate.

<head>
	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
</head>
<body>
	<div id="initialdiv">this is the main div at first</div>
	<div id="anotherdiv">this is another div at first</div>

	<script type="text/javascript">
		$(document).ready(function() {
			$('body').wrapInner('<div id="bodywrap"></div>');
		});

	alert("watch me duplicate");
	</script>

</body>

Change History (10)

comment:1 Changed 5 years ago by jboesch

In my opinion, this feels like a weird way to be using wrapInner... this seems like it's expected that it would re-run the script block if it has to restructure the DOM.

In any case, here is the jsfiddle: http://jsfiddle.net/jboesch26/5ynpG/

comment:2 Changed 5 years ago by Nicholai Burton <nicholai.burton@…>

The use case is for when you don't have control of a page's source code and need to modify it (in my case to wrap it in two divs with margin:auto on each, to center the page). The docs describe the method as a way to move elements around, but it appears to be recreating them. With traditional JS I would do this: http://jsfiddle.net/adGZS/. So it may just be a documentation issue if there is an alternative jQuery method to wrap items by just moving the children into the wrapper.

comment:3 Changed 5 years ago by timmywil

  • Component changed from unfiled to manipulation
  • Priority changed from undecided to high
  • Resolution set to duplicate
  • Status changed from new to closed

comment:4 Changed 5 years ago by timmywil

Duplicate of #3105.

comment:5 Changed 5 years ago by dmethvin

  • Resolution duplicate deleted
  • Status changed from closed to reopened

We're going to reopen this and try to fix it internally. Anyone who manually removes and then reinserts scripts is responsible for making sure they don't re-execute.

comment:6 Changed 5 years ago by timmywil

  • Status changed from reopened to open

comment:7 Changed 4 years ago by dmethvin

#11227 is a duplicate of this ticket.

comment:8 Changed 4 years ago by mikesherov

  • Blocked by 11795 added

comment:9 Changed 4 years ago by mikesherov

  • Owner set to gibson042
  • Status changed from open to assigned

comment:10 Changed 4 years ago by gibson042

  • Resolution set to duplicate
  • Status changed from assigned to closed

Duplicate of #10470.

Note: See TracTickets for help on using tickets.