Facebox将逗号添加到输入中

我正在使用facebox在灯箱内显示一个表单,没什么太令人兴奋的(只有几个日期选择器,一些文本框和一个复选框)。 但是,我遇到了回发的问题,每当我从facebox发回来时,它会在输入的开头添加一个’,’(所以“兔子”变成“,兔子”)现在,我看到有相同的来自ajaxcontroltoolkit的modalpopup扩展程序的问题,所以我认为这是一个常见的问题。

任何人都可以解释为什么会这样,或告诉我如何解决它? 提供一个体面的解决方法吗? 我实际上已经做到了,并且效果非常好,但我真的不想回答我自己的赏金问题,所以其他人一试!

干杯,艾德

编辑

请参阅附件以获得正确的解决方案(我最终解决了这个问题,但不想破坏赏金问题,所以在之后留下答案)。

你为什么不削减输出? 只需删除每个字符串的’,’即可

我从来没有在ASP.NET中编程或使用过facebox这一事实,但这里有一些可能有用的小研究解决方案。

facebox源中有一个revealfunction,其中实际克隆完成:

 reveal: function(data, klass) { $(document).trigger('beforeReveal.facebox') if (klass) $('#facebox .content').addClass(klass) $('#facebox .content').append(data) // <--- This does the cloning 

额外的逗号显然来自重复的原始表单字段。 您可以将click()函数绑定到提交表单的提交按钮,并在该函数中删除其中一个克隆。 由于此函数应在处理表单数据之前运行,因此应该处理重复项。

 $("#my-submit-button").click(function() { $('#facebox .content').empty(); } 

如果这不起作用,那肯定会。 Facebox有很多钩子可以在各种事件之后运行你的代码。 其中一个钩子是reveal.faceboxafterReveal.facebox 。 由于克隆是在揭示上完成的,因此您必须绑定自定义函数才能在此事件中运行,并在该函数中更改所有元素的ID /名称。 为每个元素附加一个像_temp或其他东西的随机单词。 不是确切的代码,但我希望你能得到这个想法。

 (document).bind('reveal.facebox', function() { $("#facebox .content > *").each( // change the id's/name's ); }); 

编辑

看看面向Facebox示例的html,它看起来像是在它自己的

并复制必须在该div中显示的任何内容。 因此,样本面板框页面的结构可能如下所示:

  .. 
// original form controls go here, probably hidden
...
// the original form is copied inside this space and then displayed // this is the one the user interacts with and makes changes to
...
..

因此,基于此结构和示例, id=theId的输入框出现在div#myFormdiv#faceboxdiv#facebox是具有我们需要的更新值的那个。

好的,这是我修复它的方式:

改变

     function fillFaceboxFromHref(href,klass){
 ....
         if(href.match(/#/)){
             var url = window.location.href.split('#')[0]
             var target = href.replace(url,'')
             $ .facebox.reveal($(target).clone()。show(),klass)
 ....
     } 

     function fillFaceboxFromHref(href,klass){
 ....
         if(href.match(/#/)){
             var url = window.location.href.split('#')[0]
             var target = href.replace(url,'')
             $ .facebox.reveal($(target).show(),klass)
 ....
     } 

将阻止它克隆输入,而是使用实际的div。

然后,它只是将内部内容重新附加到#aspnetform(或者#body,因为它最初使用[你必须改变它以允许asp.net回发])然后在close.facebox绑定中清除之前的情况。所以:

     $(document).bind('close.facebox',function(){
 ///两行添加内容将内容添加回#aspnetForm,显示:无;  (即看不见)
         $('#facebox .content')。children()。css({'display':'none'});
         $('#aspnetForm')。append($('#facebox .content')。html());
 ///额外的行,以确保面板关闭时没有闪烁效果:内容仍在那里!
         $('#facebox .content')。children()。css({'display':'block'});
 .... 

现在将使用原始div作为内容,避免逗号问题。 但是,如果你想使用最初在页面上可见的div,那么在close.facebox绑定中需要一些额外的twiddling。