【问题标题】:How do you determine the input type in Dart?你如何确定 Dart 中的输入类型?
【发布时间】:2013-05-09 05:04:30
【问题描述】:

我想找到一个表单上的所有单选按钮,而别管其他输入类型。我的代码如下所示:

form.queryAll("select, input").forEach((Element el) {
  if (el is RadioButtonInputElement) {
     print ('got radio button');
  } else {
     print ('got some other input type');
  }
}

这会导致除select 之外的所有输入类型都被识别为单选按钮。事实上,如果我在then 分支(“得到单选按钮”)中查看el,它总是报告为InputElement

【问题讨论】:

    标签: dart html-input dart-html


    【解决方案1】:

    您也可以编写一个查询选择器来只返回单选按钮。

    List<RadioButtonInputElement> list = element.querySelectorAll("input[type='radio']");
    

    【讨论】:

      【解决方案2】:

      很容易理解,您似乎假定RadioButtonInputElementInputElement 的子类。事情实际上或多或少地反过来工作:InputElement 实现RadioButtonInputElement。当您记住 input 元素在其所有各种形式中仍然是一个 input 元素时,这实际上是有道理的,并且它的 type 属性区分了它的外观和行为。

      正如您所发现的,所有input 元素因此匹配(使用is 运算符)InputElement 实现的所有接口:inputtype="radio" 将匹配ButtonInputElement,就像@987654334 @ 与 type="button" 将匹配 RadioButtonInputElement。它们都是InputElements,同时满足两个接口。

      正如您还发现(在您的回答中),解决方案是测试您的 InputElementtype 字段:

      if (el.type == 'radio') {
        print('got radio button');
      }
      

      我觉得解释是有道理的,所以尽管您已经找到了解决方案,但我还是添加了这个答案。

      【讨论】:

      • 我会说这值得提交一个错误。这很混乱。
      • +1 @Ladicek - 这远非直观,例如单选按钮 InputElement 实现 CheckboxInputElementPasswordInputElement
      【解决方案3】:

      我最终改变了测试:

      if ( el.type == 'radio' ) {
        print ('got radio button');
      }
      

      【讨论】:

        猜你喜欢
        • 2018-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-30
        • 1970-01-01
        • 2012-12-02
        相关资源
        最近更新 更多