Javascript 由于条件原因无法启用按钮

Javascript not able to enable button due to condition

我下面有一个纯 JS,它无法正常工作,因为它必须满足条件才能启用按钮。

它可以在 jsfiddle 上工作,但不能在代码中工作。 我删除了其他条件以测试问题所在。我在这里遗漏了什么吗?

JS:

<script type = "text/javascript">
var show = document.getElementById('show');
var button = document.getElementById('sub1');

var conditions = {
  cond3: false
};

function setCondition3(e) {
  conditions.cond3 = e.target.value && e.target.value.length > 0;
  enableButton(conditions);
}

function enableButton(options) {
  if (options.cond3) {
    button.removeAttribute('disabled');
  } else {
    button.setAttribute('disabled', true);
  }
}

show.addEventListener('change', setCondition3, false);
</script>

HTML:

<section id="placeOrder">
            <h2>Place order</h2>
            Your details
            Customer Type: <select id="show" name="customerType" onchange="change(this)">
                <option value="">Customer Type?</option>
                <option value="ret">Customer</option>
                <option value="trd">Trade</option>
            </select>

<p><input type="submit" name="submit" value="Order now!" id="sub1" disabled="disabled"/></p>

It's able to work on jsfiddle but just not in codes

这几乎总是意味着你试图在它存在之前访问该元素,因为 jsFiddle 的 (令人难以置信的令人惊讶) 默认设置是包装你所有的 JavaScript 在它分配给 window.onload 的函数中,这意味着它不会 运行 直到页面加载过程的很晚。

将您的 script 标签 放在 它们所指的 HTML 下方。通常,除非您有充分的理由要做其他事情,否则最好将您的脚本放在最后,就在结束 </body> 标记之前。

这是您的代码,在 HTML 之后的 script 用于元素:

<section id="placeOrder">
  <h2>Place order</h2>
  Your details Customer Type:
  <select id="show" name="customerType">
    <option value="">Customer Type?</option>
    <option value="ret">Customer</option>
    <option value="trd">Trade</option>
  </select>

  <p>
    <input type="submit" name="submit" value="Order now!" id="sub1" disabled="disabled" />
  </p>
</section>
<script>
var show = document.getElementById('show');
var button = document.getElementById('sub1');

var conditions = {
  cond3: false
};

function setCondition3(e) {
  conditions.cond3 = e.target.value && e.target.value.length > 0;
  enableButton(conditions);
}

function enableButton(options) {
  if (options.cond3) {
    button.removeAttribute('disabled');
  } else {
    button.setAttribute('disabled', true);
  }
}

show.addEventListener('change', setCondition3, false);
</script>

(我在上面使用了明确的 script 标记来强调,但如果我将 JavaScript 放在 Stack Snippet 的右侧框中,它也可以工作,因为 Stack Snippets 将代码放在 HTML 之后。)

请注意,我还从 <select> 标签中删除了 onchange="change(this)",因为您使用的是 addEventListener。我还关闭了 <section> 标签。