JQuery val()不适用于Opera中的textarea

时间:2010-09-16 05:36:08

标签: jquery cross-browser opera

我正在使用jQuery显示模式对话框。该对话框具有textarea控件。但是在提交此对话框时,由于某种原因,jQuery无法识别此textarea的值:它始终为空白。 这在其他浏览器中完美运行。我发出警告来显示值,但它看起来是空白的。在这方面有人可以帮助我吗?

控制:

<input type="text" id="txtGroupName"/>
<textarea rows="3" cols="30" id="txtDescription"></textarea>

使用此值的jQuery代码:

var postData = new Object();
postData.GroupName = $('#txtGroupName').val();
postData.Description = $('#txtDescription').val();

$('#txtDescription').val()空白但$('#txtGroupName').val()被正确读取,因为它是输入字段。

关于这个问题的另一个发现:

当我在页面加载时填充控件值后在我的更新功能中设置警报时,此警报会正确显示现有值。但它只显示现有价值。提交模式框后,它不会显示已编辑的值。

10 个答案:

答案 0 :(得分:3)

jquery中的

val()和text()工作正常,但是在设置textarea的值之后你需要 重新渲染textarea,你可以这样设置css属性

if ($.browser.opera)
    $('textarea').val(someText).css({display:block});
else
    $('textarea').val(someText);

来自俄罗斯的你好。抱歉我的英文=)

答案 1 :(得分:3)

我在textarea

中解决这个问题
$("#descripcion").keydown(function(){
     $("#descripcion").css("display","block");
});

放在脚本末尾。 我很抱歉我的英文

答案 2 :(得分:1)

您是否尝试过.attr("text").attr("value")?我无法测试这个,但这对我来说似乎是合乎逻辑的。

如果没有,请告诉我,我将删除此答案。

答案 3 :(得分:1)

可能遇到一个非常模糊的错误,在Opera网站上发布的博客帖子1中提到“PATCH-287,Hack使脚本看到TEXTAREA中的类型值在blog.ebuddy.com上.Opera无法从以前隐藏的textarea中读取正确的值“。

我有点不愿意在没有看到完整代码的情况下推荐变通方法。

答案 4 :(得分:1)

美好的一天,

我对Opera 10.63和Windows也有同样的问题。

Javier Canizalez建议的黑客工作,但只要我不重用对话框(和textarea)。然而,这种情况并非如此。通过他的黑客,在页面加载后我点击一个项目,我显示一个之前隐藏的对话框(显示:无),里面有textarea。一切都很好(第一次)(黑客)。关闭对话框/ * $(对话框).hide()); * /并通过点击另一个项目再次重复使用,黑客不再工作,javascript / jQuery不再获取新的类型值,直到整页重新加载。

我在上面给出的一个链接中发现歌剧中的人已经解决了这个问题:PATCH-287 但它似乎并不适合我:)我在那里写了一个问题,看看他们是否会回复: opera patch-287

有人设法找到解决方法吗?

谢谢你,并致以最诚挚的问候。

答案 5 :(得分:0)

Textarea没有值属性。尝试使用

$('#txtDescription').text();

答案 6 :(得分:0)

我发现,在Chrome 6.0.472.59,Firefox 3.6.9和Opera 10.62中,所有这些都在Ubuntu 10.04上,textarea确实拥有/使用.val()属性。如果其他浏览器没有或可能没有,我将这个jsbin demo放在一起。不过,我使用if/else块来涵盖这两种方法。以防万一...

$(document).ready(
  function() {
  $('form').submit(
    function() {

      if ($('textarea').val()) {
        var means = 'val()',
        textValue = $('textarea').val();
      }
      else {
        var means = 'text()',
        textValue = $('textarea').text();
      }

      alert('(' + means + ') ' + textValue);

      return false;
    }
    );
  }
  );

此Stackoverflow问题(jQuery get textarea text)也表明它应该是可行且可靠的,Val()jQuery.com的API页面上的第一个评论者也是{{3}}。

注意,就Opera而言:只有在我停用开发人员工具(无论出于何种原因)后,jsBin演示才有效。可能值得关闭Dragonfly(如果它正在运行),然后刷新演示页面(或者,显然,你自己的测试页面),看看它是否有所作为。无论哪种方式,总是值得清除缓存,以确保使用最新版本的文件。

答案 7 :(得分:0)

在Opera中获取值或textarea仅适用:

的document.getElementById( “描述”)值;

奇怪的是$(“textara#description”)。val(“”)有效(设定方法)

答案 8 :(得分:0)

我使用此解决方法:


if (window.opera)
{
  document.addEventListener('focus', function(event){
    if (event.target instanceof HTMLTextAreaElement)
    {
      event.target.contentEditable = true;
      event.target.contentEditable = false;
    }
  }, true);
}

答案 9 :(得分:0)

按属性名称选择<textarea>而不是ID。

<textarea id="txtDescription" name="txtDescription"></textarea>
<script>
  jQuery("textarea[name='txtDescription']").val();
</script>