Facebox将逗号添加到输入中
我正在使用facebox在灯箱内显示一个表单,没什么太令人兴奋的(只有几个日期选择器,一些文本框和一个复选框)。 但是,我遇到了回发的问题,每当我从facebox发回来时,它会在输入的开头添加一个’,’(所以“兔子”变成“,兔子”)现在,我看到有相同的来自ajaxcontroltoolkit的modalpopup扩展程序的问题,所以我认为这是一个常见的问题。
任何人都可以解释为什么会这样,或告诉我如何解决它? 提供一个体面的解决方法吗? 我实际上已经做到了,并且效果非常好,但我真的不想回答我自己的赏金问题,所以其他人一试!
干杯,艾德
编辑
请参阅附件以获得正确的解决方案(我最终解决了这个问题,但不想破坏赏金问题,所以在之后留下答案)。
你为什么不削减输出? 只需删除每个字符串的’,’即可
我从来没有在ASP.NET中编程或使用过facebox这一事实,但这里有一些可能有用的小研究解决方案。
facebox源中有一个reveal
function,其中实际克隆完成:
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.facebox
或afterReveal.facebox
。 由于克隆是在揭示上完成的,因此您必须绑定自定义函数才能在此事件中运行,并在该函数中更改所有元素的ID /名称。 为每个元素附加一个像_temp
或其他东西的随机单词。 不是确切的代码,但我希望你能得到这个想法。
(document).bind('reveal.facebox', function() { $("#facebox .content > *").each( // change the id's/name's ); });
编辑 :
看看面向Facebox示例的html,它看起来像是在它自己的
并复制必须在该div中显示的任何内容。 因此,样本面板框页面的结构可能如下所示:
.. ..
因此,基于此结构和示例, id=theId
的输入框出现在div#myForm
和div#facebox
。 div#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。