这似乎是一个简单的问题,但到目前为止,我几乎每次都被挫败了。
我使用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
,我会收到输入文本区域的文字。
在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应用程序????
答案 0 :(得分:0)
这很奇怪,我唯一能想到的是IE不支持属性选择器(CSS,[name =])。然而,这应该不重要,因为JQuery使用它自己的引擎来“找到”DOM中的元素。
我建议将此记录为JQuery上的错误。
答案 1 :(得分:0)
根据您的评论中的对话,在属性值周围添加引号可以解决IE7中的问题:
$('textarea[name="' + appId + '"]').val();
即使 working jsFiddle demo 我首先在您的评论中添加了IE7和IE8,但没有引号。