jQuery的.val()无法在Facebox中运行

我在我的一个网站上使用Facebox( http://defunkt.github.com/facebox/ )。 此外,我在网站上广泛使用jQuery。

我的问题是.val()函数似乎在facebox中不起作用。 现在,这是显示为facebox的DIV:

$('.add-tag-form').submit(function(){ alert($('input.tags-input').val()); return false; });

现在,问题是input.tags-input的值没有出现在警告框中。 它显示为空。

为了使问题更糟,jQuery选择实际上是有效的。 也就是说, $('input.tags-input').hide()完全正常。

为了使问题更严重, .val()使用初始值。 也就是说,如果我使用这个:

  

然后,警报框显示“Some Value”,无论我是否更改了值。

我完全被困在这里了。 代码中相同位置的.val()可以与facebox外的文本框一起使用。

你需要将你的代码包装在一个匿名函数中,比如

 $(function() { ... }); or $(document).ready(function() { ... }); 

可能是这个帮助

 $(function() { $('.add-tag-form').submit(function(){ alert($('input.tags-input').val()); return false; }); }); 

如果问题仍然存在,请告诉我

转到facebox.js第254行更改
$ .facebox.reveal($(target).clone()。show(),klass) to
$ .facebox.reveal($(target).show(),klass)

Facebox正在克隆您提供的div,而不是实际显示它。 当你调用.val()时,它将返回原始div的值,但修改后的div(用户与之交互)实际上是一个克隆的div。

我有同样的问题。 在我修复之后,其他东西坏了(facebox只加载div一次,当它关闭时似乎没什么用)

正如Ngo Minh Nam指出的,facebox将复制原始div,因此您正在读取输入字段的初始值。

这是我(丑陋)的解决方法,使事情有效:

 $('#input_field_id').live('keyup', function() { $('#input_field_id').val($(this).val()); }); 

每次在值框内按下一个键时,这将更新输入字段。

更新 :忘了! 只需在要阅读的元素的id之前附加#facebox即可。 在我的例子中:

 $('#facebox #input_field_id').val(); 

还请注意,你必须将这些线包裹在里面

  $(document).bind('reveal.facebox', function() { 

问题是,当您的javascript代码运行时,文档尚未加载。 当你运行$(’。add-tag-form’)时,jquery看起来并没有找到任何与查询匹配的元素,因此没有任何反应。

要解决这个问题,请像Avinash所说,并告诉jQuery在文档准备好后运行代码。 我通常这样做:

 $(document).ready(function(){ ... }); 

另一件事,为了安全起见,我也喜欢用jquery包装我的函数并调用它们,如下所示:

 (function ($){ $(document).ready(function() { ... }); })(jQuery); 

这样,如果某人覆盖$ name,脚本仍然有效,我仍然可以使用$快捷方式。

我被困在最后一天。 在我的情况下,facebox.js显示链接no 243-> $ .facebox.reveal($(target).html(),klass)并将其更改为$ .facebox.reveal($(target).show() ,klass),它的工作原理。 感谢上述所有post

最后我想更新这篇文章,我已经使用lightbox而不是facebox来摆脱我的facebox表单提交问题,并且它在第一次尝试时工作。灯箱有更多的选项,并提供比facbox更好的输出