views:

51

answers:

1

Hello,

I've run into an issue regarding replaceWith not maintaining the state of a moved radio button input. I've prepared a simple example illustrating this issue. This works in FF and Chrome, but not IE.

Is there a way around this?

Thanks!

jsbin: http://jsbin.com/unola4/2

code:

<html>
<head>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"&gt;&lt;/script&gt;
<title>IE replaceWith issue</title>
<script type='text/javascript'>
$(function(){
  $('a').click(function(e) {
    e.preventDefault();
    $('#temp').replaceWith($('#window').children());
  });
});
</script>
</head>
<body>
  <a href='#'>run replaceWith</a>
  <p>Select a radio button and then click "run replaceWith". The value persists in FF, but not IE.</p>
  <div id='window' style='background-color: #DDD; height: 100px;'>
    <input id="id_received_date-days_0" type="radio" name="received_date-days" value="30" />
    <input id="id_received_date-days_1" type="radio" name="received_date-days" value="50" />
    <input type='text' name='test-test' />
  </div>
  <br />
  <form id='foo' style='background-color: #EEE'>
    <div id='temp'></div>
  </form>
</body>
</html>
A: 

Grab the IDs of the checked ones, then check them again after replacing:

$('a').click(function(e) {
    e.preventDefault();
    var checkedOnes = $("#window input:checkbox:checked").map(function() {
        return this.id;
    }).get();
    $('#temp').replaceWith($('#window').children());
    $.each(checkedOnes, function(index, value) {
        $("#" + value).attr("checked", "checked"); 
    });
});

Also, you're ending up with duplicate IDs when you copy those elements. I'm assuming you remove the old ones after the replace? Could duplicate IDs be the cause of the problem?

karim79
Doesn't replaceWith move the elements (as in add and remove), not clone?The example in the replaceWith docs states: "From this example, we can see that the selected element replaces the target by being moved from its old location, not by being cloned."
copelco