【问题标题】:How to find/detect any textarea in page in javascript如何在javascript中查找/检测页面中的任何文本区域
【发布时间】:2010-01-04 20:39:57
【问题描述】:

(document.getElementById('textarea').length > 0) 不起作用。有没有人知道除此之外的其他事情?

这是我之前的问题中没有回答的场景。我有富文本编辑器(Openwysiwyg),当我转到放置 textarea 的特定页面时,它被加载到 textarea 中。该函数使用 textarea id 来识别 textarea 以将其替换为富文本编辑器 (RTE)。现在调用此函数的脚本位于页面的标题部分。我选择了一个用于发送电子邮件的下拉选项,因此我的电子邮件文本区域出现了。为 RTE 添加此脚本后,我的电子邮件文本区域被 RTE 替换,我可以发送格式化的电子邮件。所以这在 Firefox 中运行良好。使用 IE7,RTE 甚至在我为电子邮件选择下拉选项之前就出现了,这使整个页面变得混乱。当我为电子邮件选择下拉选项时,我只看到正常的文本区域,而 RTE 仍然位于页面顶部。

【问题讨论】:

  • 好的,我还不确定我是否完全明白 - 当你说“我选择了一个下拉选项来发送电子邮件,所以我的电子邮件文本区域出现了”时,文本区域是否已经是页面的一部分(但隐藏)还是在您选择下拉列表时动态创建?看起来 RTE 通过隐藏 textarea 并用 iframe 替换它来工作,所以如果 textarea 已经隐藏并在您从下拉列表中选择时可见,这将部分解释您在 IE 中看到的行为。抱歉,可能需要查看实际代码来帮助解决问题,这里有太多潜在因素。
  • 你已经明白我的意思了。文本区域被隐藏。它显示在选择下拉选项时。你认为为什么 IE 在这种 javascript 场景中表现得不像 firefox?

标签: javascript internet-explorer-7 textarea


【解决方案1】:

document.getElementsByTagName('textarea').length > 0

【讨论】:

    【解决方案2】:

    你可以使用(注意复数形式!)

    var e = document.getElementsByTagName("textarea");
    

    你也可以使用 jQuery:

    $("textarea").each( function() { /* ... */ } );
    

    编辑: 我曾经遇到过类似的问题。我正在使用 fckedit,当我尝试读取我的 textedit (document.getElementById('blabla').value) 的值时,我得到了 null,即使是富文本编辑也很难在屏幕上显示某些内容。

    事实证明,fckedit API 在 textarea 顶部打开了一个新元素,并且只有当您从页面导航时才会将其内部数据(如果我没记错的话,它位于 iframe 上)同步到原始 textarea .

    故事的寓意:如果您正在使用一些富文本 API - 使用它的 API 来查询您的“文本区域”的状态。希望这对您有所帮助,因为我不知道您正在使用的库。

    PS:我实际上使用了$("blabla").val() ...这也是JavaScript...出于某种原因人们认为jQuery不是javascript。这是为什么呢?

    【讨论】:

    • 不明白为什么人们会说你也可以使用 JQuery 来回答 Javascript。同意它是一个很好的库和东西,当它可以用普通的 Javascript 解决时,为什么不必要地说“你也可以使用 JQuery”。
    • 我只是在教育其他选择。如果我知道 Prototype,我也会举个例子。
    • 谢谢大家,但这对我没有帮助。我试过这个,但是在我检查 textarea 的 if 子句之后包含的 javascript 永远不会被调用。
    • 试试 document.getElementsByTagName('textarea')[0].length
    • 我只有一个 textarea,所以不用按数组检查它。另外我想强调一下,我在使用 Internet Explorer 时遇到了这个问题,在 Firefox 中一切正常,没有任何条件。
    【解决方案3】:

    纯 JavaScript(您可以使用此代码)

    textarea 是 HTML 元素标签

    JavaScript :

    if(document.getElementsByTagName('textarea').length > 0) {
    
    }
    

    HTML 代码:

    <div class="flavor">
    
      <div class="value">
    
        <textarea name="name" rows="8" cols="80"></textarea>
    
      </div>
    
    </div>
    
    <script type="text/javascript">
    
      var flavorbox = document.getElementsByClassName('flavor')[0]  
                              .getElementsByClassName('value')[0]
                              .getElementsByTagName('textarea').length;
    
      alert(flavorbox);
    
    </script> 
    

    【讨论】:

      【解决方案4】:

      由于 openWYSIWYG 会即时生成iframe,因此获取/设置其内容并不那么简单。

      我目前正在更改源中的这些设置。收到更改后将在此处发布链接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-26
        • 2010-11-29
        • 2014-12-23
        • 2011-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多