无法得到.replaceWith()正常工作

问题描述:

我试过这个.toggle()和下面的更长的表单。如果我取出.replaceWith的行,它可以很好地显示和隐藏#表单,但是它可以......#表单取消隐藏和#show-form更改正确,但不适用于下次点击。无法得到.replaceWith()正常工作

任何人都可以看到我在做什么错?

<script type="text/javascript"> 
    jQuery('#show-form').click(
     function() { 
      if (jQuery("#the-form").is(":hidden")) { 
       jQuery('#the-form').show('fast'); 
       jQuery('#show-form').replaceWith('<div id="show-form">Hide Form</div>'); 
      } else { 
       jQuery('#the-form').hide('fast'); 
       jQuery('#show-form').replaceWith('<div id="show-form">Show Form</div>'); 
      } 
    }); 
</script> 

UPDATE:从报价删除反斜杠。

更新2工作版本:

<script type="text/javascript"> 
jQuery('#show-form').live('click', 
    function() { 
     if (jQuery("#the-form").is(":hidden")) { 
      jQuery('#show-form').html('Hide Form'); 
      jQuery('#the-form').show('fast'); 
     } else { 
      jQuery('#show-form').html('Show Form'); 
      jQuery('#the-form').hide('fast'); 
     } 
}); 

感谢您的帮助!

+1

为什么不直接使用html函数? jQuery('#show-form')。html('隐藏窗体'),反之亦然 –

+0

实际上,乔丹有最好的答案。 – bozdoz

+0

@Joardan ...刚试过你的建议,它的工作原理!你为什么不把它移到答案,以便我可以正确地称赞你? –

搬家回答:

为什么不直接使用html函数呢? jQuery('#show-form')。html('隐藏窗体'),反之亦然

从div id属性中的双引号中删除反斜杠。他们不需要转义,因为字符串已经被单引号封装了。

jQuery('#show-form').replaceWith('<div id="show-form">Hide Form</div>'); 

此外,将replaceWith()移动到显示和隐藏的回调函数。

jQuery('#the-form').show('fast', function(e) { 
    jQuery('#show-form').replaceWith('<div id="show-form">Hide Form</div>'); 
}); 

那么你就必须重新将点击事件#表演形式。您可以使用jQuery live()即时重新附加事件。 See about it here

因此,使用html()代替它可能会更好。

例如

jQuery('#show-form').html('Hide Form'); 

这样,你不删除和readding一个新的DOM元素,因此原来的onclick事件侦听器保持不变。

+1

事实上,在添加它们之前它是失败的......但是我会试一试,以防它们从.toggle()尝试中遗留下来。 –

+1

迈克尔,看到我的答案。经过测试和工作。尽管如此,斜杠评论+1到mmmshuddup。如果您使用双引号指定字符串,则不需要单引号,反之亦然。 :) – bozdoz

+2

只是测试它没有斜线和所述的相同问题。 –

您正在使用点击处理程序,但您需要使用实时点击处理程序,因为您正在重新创建整个#show-form元素。

这应该工作:

jQuery('#show-form').live('click', 
     function() { 
      if (jQuery("#the-form").is(":hidden")) { 
       jQuery('#show-form').replaceWith('<div id="show-form">Hide Form</div>'); 
       jQuery('#the-form').show('fast'); 
      } else { 
       jQuery('#show-form').replaceWith('<div id="show-form">Show Form</div>'); 
       jQuery('#the-form').hide('fast'); 
      } 
    }); 

现场处理工作的动态创建的元素,如您重新创建一个。

+1

使用jquery live +1。这件事很神奇lol –

+2

即使它在我尝试乔丹的答案时工作,我只是更新了我的代码和上面的工作代码以包含您的建议。谢谢! –

+0

非常感谢。 :) – bozdoz