我有这个代码,它创建了一个带有几个输入的花哨的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()进行测试,如上所示)我得到&#34; undefined&#34;。如何从回调函数中访问注入的HTML输入的那些值?
答案 0 :(得分:1)
您发布的代码似乎在语法上是正确的,并且回调中的条件语句显然是真实的(因此警报) - 这必然意味着它无法检索元素的值。
我很确定这是因为当文档(DOM)准备就绪时jQuery正在被初始化,因此注入的HTML实际上并不存在 - 它稍后会被注入到DOM中;动态。
我似乎无法找到任何使用这种HTML表单的jConfirm示例;所以我要走出困境并假设这是问题所在。
the jQuery website对此问题进行了非常好的讨论。您基本上需要重新加载DOM,以便jQuery了解它正在使用的所有元素。当动态地在页面中嵌入HTML时,它可能会导致各种问题,在事件处理程序方面,您可以使用$.live()(as demonstrated here)但是访问这些元素的值似乎是一个更复杂的事情!
如果是这种情况,那么一个简单的小解决方法就是做这样的事情......
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 */
所有这一切只是有一个事件监听器附加到任何元素,其id为'postTitle',无论它们何时被插入DOM 。每当更改'postTitle'时,都会调用此事件侦听器并将新值转储到全局变量中;即 - 允许您在范围内的任何地方访问它 - 所以您的整个代码库。 (我通常不会提倡全局变量 - 但在这种情况下,它更像是概念验证/故障排除步骤;)
虽然这可能不是问题,但请尝试查看是否可以通过开发人员控制台访问该值。 (firebug等)然后尝试检查不同的浏览器,看看它是否是一种普遍的行为。我认为最可能的问题是DOM;在这种情况下,我无法想到在不使用全局变量的情况下解决它的许多方法。 (好吧,没有简单的方法)