3

这似乎是一个简单的问题,但到目前为止,我几乎每一次都受到挫败。

我正在使用 jquery 和 json 使用从多个选择返回的 id 列表动态构建用户界面。该界面的一部分包括动态创建的用户理由:

$('<textarea>').attr({
'rows': '5', 
'cols': '50', 
'name': appId,  
'id': 'AppJust' + appId}).appendTo('#contentColumn>#AppPanel' + appId);

在此过程中,我有以下代码:

var userJustification = $('textarea[name=' + appId + ']').val() ;

在 FF 中,如果我发出警报userJustification,我会得到输入到 textarea 中的文本。

在 IE 中,如果我提醒userJustification我得到undefined.

我也尝试过var userJustification = $('textarea[name=' + appId + ']').attr('value') ; 完全相同的结果。

如果我完全改变:

var userJustification = $('textarea[name=' + appId + ']').val() ;

至:

var userJustification = $('textarea#AppJust' + appId).val() ;

有用...

我的问题是:

为什么名称方法在 FF 而不是 IE 中有效?

编辑

使用 Scott 发布的信息,我很感兴趣,我对代码进行了一些修改。

var userJustification = $('textarea[name=' + appId + ']').val() ; 

但它在我的环境(IE7)中仍然不起作用......我不确定为什么或如何,因为对于所有应该正常工作的意图和目的。斯科特的小提琴证明了这一点。

因此,无缘无故(实际上是偶然)对代码进行了微小的改动:

var userJustification = $('textarea[name = ' + appId + ']').val() ; 

(注意选择器中“=”前后的空格)

它可以工作......起初我认为它与 appId 是一个整数有关......但即使我将“One”更改为 25......它仍然可以正常工作。

我在 FF 中进行了验证以查看它是如何呈现的。这是一个示例,说明创建文本区域时的外观...没有什么不寻常的:

<textarea id="AppJust40" rows="5" cols="50" name="40"></textarea>

它可能与页面本身的呈现方式有关吗?它是 Apache 服务器上的 Apex 应用程序????

4

2 回答 2

0

根据我们在您的评论中的对话,在属性值周围添加引号可以为您解决 IE7 中的问题:

$('textarea[name="' + appId + '"]').val();

即使我首先在您的评论中添加的工作 jsFiddle 演示在没有引号的情况下在 IE7 和 IE8 中都可以使用。

于 2011-04-25T19:24:55.107 回答
0

很奇怪,我唯一能想到的是 IE 不支持属性选择器(CSS,[name=])。然而,这无关紧要,因为 JQuery 使用它自己的引擎来“查找”DOM 中的元素。

我建议将此记录为 JQuery 上的错误。

于 2011-04-25T16:04:04.393 回答