0

我有这段代码,它制作了一个带有几个输入的花哨的 jQuery 警报框:

//jConfirm( message, [title, callback] )
    $('#buttonNew').click(function(){
             jConfirm('<form><input id="postTitle" type="text"/><br/><textarea id="postBody"></textarea></form>', 'New Post',
             function(r){if(r==true){
                    alert($('#postTitle').val()); //Expecting the input value but getting "undefined"
                                  }
                         });
                         })

当我尝试使用输入到输入中的值(例如使用 alert() 进行测试,如上所示)时,我得到“未定义”。如何从回调函数中访问注入的 HTML 输入的那些值?

4

1 回答 1

1

您发布的代码似乎在语法上是正确的,并且回调中的条件语句显然是正确的(因此发出警报) - 这一定意味着它无法检索元素的值。

我很确定这是因为 jQuery 在文档 (DOM) 准备就绪时被初始化,所以注入的 HTML 在那个时候实际上并不存在 - 它稍后被注入到 DOM 中;动态的。

我似乎找不到任何使用这样的 HTML 表单的 jConfirm 示例;所以我会四处走动并假设这是问题所在。

在 jQuery 网站上有一个关于这个问题的很好的讨论。您基本上需要重新加载 DOM,以便 jQuery 了解它正在使用的所有元素。将 HTML 动态嵌入页面时可能会导致其他问题,在涉及事件处理程序的情况下,您可以只使用$.live()如此处所示)但是访问这些元素的值似乎是一件复杂得多的事情!

如果是这种情况,那么一个简单的小解决方法就是做这样的事情......

var title; //in global scope.. yucky!

/* set a -live- event listener to fire whenever 
** postTitle is modified; dumping the value in to
** our global var */
$('#postTitle').live('change',function(r){
    title = $(this).val();
});

/* then just access the 'title' var */

所有这一切只是有一个事件侦听器,该侦听器附加到任何具有 'postTitle' id 的元素,无论它们何时插入到 DOM中。每当更改“postTitle”时,都会调用此事件侦听器并将新值转储到全局变量中;即 - 允许您在范围内的任何地方访问它 - 所以您的整个代码库。(我通常不提倡全局变量——但在这种情况下,它更像是概念验证/故障排除步骤;))

由于这可能不是问题,请尝试查看您是否可以通过开发人员控制台访问该值。(萤火虫等)然后尝试检查不同的浏览器,看看它是否是一种普遍的行为。我认为最有可能的问题是 DOM。在这种情况下,如果不使用全局变量,我想不出很多方法来解决它。(好吧,没有简单的方法)

于 2012-07-25T23:25:10.270 回答