【问题标题】:Detecting display: inline-block with Javascript vanilla检测显示:带有 Javascript vanilla 的内联块
【发布时间】:2020-05-08 09:09:17
【问题描述】:

我有一个多语言注册页面。所有这些都在一个 HTML 文档中,每种语言都在自己的 div 中,display:none;display:visible 取决于所选语言。

所有形式都是相同的,即。 <input type="email" class="email"> 在所有表单上都相同(使用不同的占位符等)。

我想知道如何使用条件语句来查看哪个 div 是可见的,这样我就可以通过索引取出适当的类信息。

比如用户填写了英文注册页面,我知道我需要使用getElementsByClassName(".email")[1].value。 (索引 1)。

或者有没有办法检测数组中的哪个元素具有实际的内容/值(因为特定的类数组将为空,除了 1 个条目)。

HTML

<div class="lng" id="sl">
    <div class="registerTitle">
        Slo - Register
    </div>
    <div class="registerForm">
        <form accept-charset="utf-8" name="mail" onsubmit="return false;" method="post" id="mail">
            <input type="text" name="fname" required maxlength="50" minlength="1" placeholder="Janez"
                   onfocus="this.placeholder = ''" onblur="this.placeholder = 'Janez'" /><br />
            <input type="text" name="lname" required maxlength="50" minlength="1" placeholder="Novak"
                   onfocus="this.placeholder = ''" onblur="this.placeholder = 'Novak'" /><br />

            <span class="radioS">Spol: </span><br /><br />
            <div class="radioC"><label><input type="radio" name="spol" value="M">Moski</label></div><br />
            <div class="radioC"><label><input type="radio" name="spol" value="Z">Zenski</label></div><br />
            <div class="radioC"><label><input type="radio" name="spol" value="O">Ostalo</label></div><br /><br />

            <input type="email" name="email" autofocus="autofocus" required placeholder="moj@email.com"
                   onfocus="this.placeholder = ''" onblur="this.placeholder = 'moj@email.com'" />
            <br />
            <input type="button" value="Submit" id="submit_ok" name="submit_ok" /> <br />
        </form>
    </div>
</div>
<div class="lng" id="en">
    <div class="registerTitle">
        Eng - Register
    </div>
    <div class="registerForm">
        <form accept-charset="utf-8" name="mail" onsubmit="return false;" method="post" id="mail">
            <input type="text" name="fname" required maxlength="50" minlength="1" placeholder="John"
                   onfocus="this.placeholder = ''" onblur="this.placeholder = 'John'" /><br />
            <input type="text" name="lname" required maxlength="50" minlength="1" placeholder="Doe"
                   onfocus="this.placeholder = ''" onblur="this.placeholder = 'Doe'" /><br />

            <span class="radioS">Gender: </span><br /><br />
            <div class="radioC"><label><input type="radio" name="spol" value="M">Male</label></div><br />
            <div class="radioC"><label><input type="radio" name="spol" value="Z">Female</label></div><br />
            <div class="radioC"><label><input type="radio" name="spol" value="O">Other</label></div><br /><br />

            <input type="email" name="email" autofocus="autofocus" required placeholder="my@email.com"
                   onfocus="this.placeholder = ''" onblur="this.placeholder = 'my@email.com'" />
            <br />
            <input type="button" value="Submit" id="submit_ok" name="submit_ok" /> <br />
        </form>
    </div>
</div>

【问题讨论】:

  • 您可以选择语言,然后根据用户选择的语言显示表单。
  • 是的,我已经有了。因此,如果用户正在提交英文表单,我需要将 getElementsByClassName(".email")[1].value 的值推送到我的 AJAX。我想知道是否有办法检测英文表单(&lt;div id="en"&gt;)是否有display:inline-block,这样我就可以取出索引为1的数组的值。如果表单/div是法语(&lt;div id="fr"&gt; ) 我需要使用索引 2... 等等。我说得通吗?

标签: javascript


【解决方案1】:

这是一种检测输入数组是否有值然后登录到控制台的方法。我知道这很笼统,但我很难准确理解您的情况需要什么:

const emailInputs = Array.from(document.querySelectorAll('.email'));
  const form = document.querySelector('form');

  form.addEventListener('change', () => {
    const hasValue = emailInputs.filter((input) => input.value);
    console.log('these inputs are active...\n');
    hasValue.forEach(val => console.log(val));
  });
<form action="" method="get" class="form-example">
    <div class="form-example">
      <label for="en">English </label>
      <input type="email" name="en" id="email" class="email">
    </div>
   <div class="form-example">
      <label for="fr">French </label>
      <input type="email" name="fr" id="email2" class="email">
    </div>
    <div class="form-example">
      <label for="es">Spanish </label>
      <input type="email" name="es" id="email3" class="email">
    </div>
    <div class="form-example">
      <label for="it">Italian </label>
      <input type="email" name="it" id="email4" class="email">
    </div>
  </form>

如果您想在此设置之外使用它,可以使用 JSFiddle

【讨论】:

  • 我经历过,但对我帮助不大。还是谢谢。
  • @DrDoom 你能发布一个更具体的问题,或者更多的代码吗?您尝试解决的问题听起来很简单,但是根据您提供的信息,我无法构建具体的答案,因为没有足够的代码可以使用。我的回答回答了您问题is there a way to detect which element in the array has actual content/value 的最后一行。我的代码会检测数组中的哪个元素有值,然后打印到控制台。
  • 嘿。我一直在编辑我的代码,对于这个特定的问题,我手头没有。我明天可以发布更多细节。我试图用不同的方法解决这个问题。问题可以在这里stackoverflow.com/questions/59863347/…再次找到,感谢您的帮助,
【解决方案2】:

看看-how can I disable everything inside a form using javascript/jquery?

禁用其他表单输入可能是一个选项,因此当您提交时,未禁用的表单会提交。

【讨论】:

  • 我的提交实际上链接到一个 javascript ajax 函数,因为在提交表单之前需要进行一些 ajax 调用。不过谢谢。看起来很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 2019-08-07
  • 2015-10-03
  • 1970-01-01
  • 2011-03-07
  • 2012-02-29
相关资源
最近更新 更多