【问题标题】:val() on textarea stops workingtextarea 上的 val() 停止工作
【发布时间】:2013-03-20 00:08:48
【问题描述】:

我有一个使用 textareas 的网站/平板电脑 html5 网络应用程序。

我的问题是“一些”javascript 代码/库或任何使 val() 调用 textarea 故障的东西。它总是返回您通常使用 text() 获得的值 - 从服务器端设置的文本。我在这个网络应用程序上使用了大量的 jquery,没有任何问题。

我首先确定的是 DOM 本身是正确的,没有任何问题。我将整个 DOM 保存到一个新的 html 文件并删除了所有 javascript。通过一个简单的按钮,我可以使用 val() 读取文本区域。

但是,在真实网站中执行的相同读取代码会出现故障。所以与其他现有的 javascript 代码/库存在某种依赖关系。

服务器端架构是一个 ASP.Net 网站。因此有相当多的代码在后台运行(Scriptmanager、MS Ajax、第三方控件……)

网站使用 jQuery 1.4.2。我已经尝试重载一个本地 jQuery 版本 1.9.1,只是为了使用 noConflict() 来排除任何旧版本问题。

我知道我很抽象,但由于网站依赖于一个庞大的数据库并且所有开发都在一个封闭的网络中,我可以提供一个链接。

有人知道 jQuery 功能尤其是 val() 对 jQuery 功能的“干扰”影响吗?

谢谢

【问题讨论】:

  • 很难说不提及使用的其他库或影响textarea的任何其他内容...如果我不得不猜测我会说您正在使用某种javascript富文本编辑器,例如TinyMCE 有自己的 API 来获取/设置值。
  • 您好,未使用 TinyMCE。但我使用的是 Syncfusion ASP.Net 控件框架。我帖子中提到的 textarea 控件是纯 ASP/HTML textareas。
  • <textarea> 元素的值在技术上是元素内部的字符数据,这恰好也是 .text() 返回的值。我误解了这个问题吗? jsfiddle.net/Gn4wk/1
  • 嗨鲁本,谢谢。不, text() 将从服务器端传递原始文本集。 val() 函数将为您提供可能已被用户更改的新文本。实际上,“新”值是不可见的,例如在萤火虫。它隐藏在其他“某处”。
  • @MatthiasMax 啊,这更有意义。您是正确的,假设您使用.val('some text string') 从服务器设置新值。但是,有一些方法可以避免这种情况,例如使用.text('some text string') (example) 设置值。没有你的任何代码,这可能是我能提供的所有帮助。

标签: jquery asp.net dom textarea


【解决方案1】:

如果控件是文本区域,您可以尝试编写如下所示的通用方法或使用 .attr('value')。

var m = this.val();  
return (m == "" ? this.attr('value') : m);

【讨论】:

    【解决方案2】:

    非常感谢所有的意见。在这种情况下,似乎无法找到 val() 发生故障的真正原因。

    我现在的解决方法是在 textarea 的每个 keypress() 事件上设置 .text()。那是我以后可以将新输入的用户文本开箱即用的唯一方法。

    我正在使用 secong 控件(隐藏)来存储框的原始默认文本,以便能够恢复到此。整个应用程序都在 AJAX 上(几乎就像一个离线应用程序)。

    谢谢大家!

    【讨论】:

      【解决方案3】:

      回答我自己的问题:我构建了一个复杂的 setTimeouts 和计时器结构(由于平板电脑/手机上缺乏真正的“关闭键盘”事件)。这导致无法读取文本框的 val()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-09
        • 2016-02-27
        • 2014-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多