【问题标题】:Validating one or the other验证一个或另一个
【发布时间】:2023-03-12 06:24:01
【问题描述】:

我创建了一个 javascript 函数,它允许我验证一个字段或另一个字段是否已填充(令人震惊的是,oneortheother)。本质上,它会检查两者是否都未填充,或者两者都未填充,然后抛出错误。

正在验证的字段之一是 input type="file" 字段。我在字段下方显示现有文件,以便用户可以查看它是否是他们想要的文件。

有没有办法在input type="file" 中没有值的情况下仍然通过oneortheother 进行验证?任何类型的 javascript 技巧?

此时我束手无策,今天晚些时候有一个需要此功能的演示,因此我们将不胜感激。

编辑:

根据要求,这里有一些例子:

<label for="pdf">Upload PDF:
<span class="fieldnote">Files of type .pdf</span>
</label>
<input type="file" name="pdf" id="pdf" class="external_form_field oneortheother_url" value="/downloads/white_papers/HigherOrderPerl.pdf"  />
<label>Existing file:</label><span class="preview"><a href="/downloads/white_papers/HigherOrderPerl.pdf" target="_blank">HigherOrderPerl.pdf</a></span>
<label for="url">Link to asset:</label>
<input type="text" name="url" id="url" class="external_form_field oneortheother_pdf" value=""  size="25" />

请注意,应用了 oneortheother_urloneortheother_pdf 类。这允许验证例程知道要与哪个字段进行比较。比较是:

if (fObj.value && fObj2.value) { }

if (!fObj.value && !fObj2.value) { }

【问题讨论】:

  • 你能发布一个例子吗?您的描述不够清楚。
  • crescentfresh - 本质上,我想找到一些方法让现有文件条目“覆盖”输入类型 =“file”,这样一个或另一个仍然有效。
  • 我们中的许多人仍然不明白实际问题是什么。如果您可以从用例的角度提出问题,而不涉及您拥有的任何当前实现,也许会有所帮助。
  • 从你的问题和回答“我不确定你的意思是......”的数量来看,我认为你真的应该改写这个问题。也许总结一下,把问题的各个部分分开。你很有可能会解决问题。

标签: php javascript html validation


【解决方案1】:

我不确定您的验证功能是如何工作的,但您似乎可以添加一个隐藏的输入来保存上传的预览文件的 url 或文件输入中的值。然后您可以将 url 输入与隐藏输入进行比较。

但您似乎只需要编写一个自定义验证函数。

【讨论】:

    【解决方案2】:

    我不确定我是否完全理解您的问题,因为我不清楚。

    你要检查这个:

    if (fObj.value && fObj2.value) {}
    

    if (!fObj.value && !fObj2.value) {}
    

    那么为什么不把它也加进去...

    if (fObj.value && !fObj2.value) {}
    

    if (!fObj.value && fObj2.value) {}
    

    【讨论】:

      【解决方案3】:

      如何在每个选项旁边添加一个单选按钮,并允许选定的单选按钮确定使用哪个选项?

      【讨论】:

      • 我试图尽可能少地混淆用户。考虑到我们的用户,这可能会让他们很困惑。
      【解决方案4】:

      很遗憾,我无法理解实际的问题,但这里有一个侧边栏提示:

      XOR 运算符可以在这样的情况下派上用场(虽然晦涩难懂):

      if (fObj.value ^ fObj2.value) {
          // Only one value is set, we're good
      } else {
          // Both of them are set or neither of them are set
      }
      

      【讨论】:

      • “晦涩”是主观的。浏览原始问题时首先想到的是 XOR。尤其是您所说的方式,IMO 可以在几秒钟内了解并理解它。
      • 在实践中,它在某种意义上是晦涩难懂的,每个人都不容易理解(从我与其他程序员的经验来看,他们审查了我经常使用 XOR 的代码)。
      【解决方案5】:

      我不确定您究竟想在这里做什么,但您可以添加一个隐藏的表单字段,然后将一个函数附加到文件输入和 URL 输入的 onchange 事件,这将设置隐藏字段到这个值。

      从根本上说,我什至不确定您当前采用的方法是否合适 - 例如,Firefox 3 不允许您直接编辑文件字段的内容,据我所知没有“取消设置”值的方法。因此,一旦选择了文件,“pdf”输入将始终为非空,这与您设置的约束(据我了解)意味着“url”输入实际上是永久有效的禁用。这更糟糕,因为你给文件输入一个初始值,这样它就永远不会是空/空字符串。

      您可能需要退后一步,仔细考虑您想要实现的目标以及替代技术是否会更好。例如,用于在文件上传框或 URL 资源之间进行选择的单选按钮,可根据需要禁用和启用字段。

      此外,即使在编辑之后,这里的大多数人也不太明白您在问什么,这表明它有些东西不太直观,这意味着需要维护此代码的人将来可能会经历类似的事情。同样,重构设计可能是有序的,或者可能只是一堆描述性的 cmets。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-22
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        • 2012-05-26
        • 2020-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多