【问题标题】:check if object is a textbox - javascript检查对象是否是文本框 - javascript
【发布时间】:2011-09-20 15:49:05
【问题描述】:

我知道我们可以使用 (javascript)

if (typeof textbox === "object") { } 

但是有没有方法可以让我确保对象是一个文本框?

【问题讨论】:

  • textbox 是什么意思? textarea, input...?

标签: javascript dom object textbox


【解决方案1】:
var isInputText = obj instanceof HTMLInputElement && obj.type == 'text';

【讨论】:

  • 一句警告:如果您的应用程序是使用多个窗口进行跨窗口 DOM 检查(或类似)的少数应用程序之一,window.HTMLInputElement === otherWindow.HTMLInputElement 将是错误的,因此 instanceof 运算符也可能意外返回 false。也适用于 iframe 和弹出窗口。在这些情况下,检查tagName 可以工作,正如已经提到的其他答案。
【解决方案2】:
if(textbox instanceof HTMLInputElement && textbox.getAttribute("type") == "text") {
    alert("I'm an input text element");
}

【讨论】:

    【解决方案3】:

    2016 开始,使用这个:

    function isTextBox(element) {
        var tagName = element.tagName.toLowerCase();
        if (tagName === 'textarea') return true;
        if (tagName !== 'input') return false;
        var type = element.getAttribute('type').toLowerCase(),
            // if any of these input types is not supported by a browser, it will behave as input type text.
            inputTypes = ['text', 'password', 'number', 'email', 'tel', 'url', 'search', 'date', 'datetime', 'datetime-local', 'time', 'month', 'week']
        return inputTypes.indexOf(type) >= 0;
    }
    

    【讨论】:

    • inputTypes 还应该包括'tel' ?
    • 感谢@ShaunLeBron。已添加。
    • 还要确保这是真的:element.isContentEditable
    • element.isContentEditable 对于可编辑的输入可能是假的,所以不要相信这是真的。 readonly 属性也可能是相关的。
    【解决方案4】:

    如果您要查找的是文本输入:

    if (textbox.tagName == "input" && textbox.getAttribute("type") == "text") {
       // it's a text input
    }
    

    如果您正在寻找文本区域

    if (textbox.tagName == "textarea") {
      // it's a textarea
    }
    

    【讨论】:

      【解决方案5】:

      你在寻找这样的东西吗?

      if(textbox.tagName && textbox.tagName.toLowerCase() == "textarea") {
          alert('this is a textarea');
      }
      

      如果你需要知道它是否是文本输入,你可以这样做:

      if(textbox.tagName && textbox.tagName.toLowerCase() == "input" && textbox.type.toLowerCase() == "text") {
          alert('this is a text input');
      }
      

      【讨论】:

      • @Sime:有时,这取决于浏览器以及它是 HTML 还是 XHTML。我会更新我的答案以确保它有效。
      • @Sime:reference.sitepoint.com/javascript/Element/tagName。 Opera 返回它是如何输入的,HTML 是大写的,XHTML 被保留。
      • @Jordan Yes: "在 HTML 中返回的都是大写的..."
      • @Sime,对,所以如果文档是 XHTML,则不能保证。
      • 无论文档类型和浏览器如何,我都编辑了我的答案,以便将所有这些都考虑在内。
      【解决方案6】:

      我想你可能想要获取一个元素的引用,然后检查 .type 的返回值,即

      var element = document.getElementById('element_in_question');
      if(element.type == "textarea"){
        console.log('I must be textarea');
      }
      

      【讨论】:

      • 这是完全错误的答案。无论是什么类型的元素,element.type 都会给出 undefined。
      • 抱歉,evt.target.type 给了我“文本”。
      猜你喜欢
      • 1970-01-01
      • 2019-04-14
      • 2020-06-18
      • 2010-09-27
      • 1970-01-01
      • 2011-08-15
      • 2014-09-10
      • 2017-10-21
      • 2017-10-15
      相关资源
      最近更新 更多