j从注入的HTML元素确认访问值

时间:2012-07-25 23:14:44

标签: jquery

我有这个代码,它创建了一个带有几个输入的花哨的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输入的那些值?

1 个答案:

答案 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;在这种情况下,我无法想到在不使用全局变量的情况下解决它的许多方法。 (好吧,没有简单的方法)