【问题标题】:How do I check to see if a field has a value before executing document.getElementById?如何在执行 document.getElementById 之前检查字段是否有值?
【发布时间】:2020-06-08 08:47:51
【问题描述】:

这可能不是很复杂,但我不是专业的编码员,所以我确定我在这里遗漏了一些东西。

这是我目前所拥有的。

function buildURL (){
          url = document.getElementById("url").value;
          source = document.getElementById("source").value; //required
          campaignId = '-_-' + document.getElementById("campid").value; //required
          brand  = '-_-' + document.getElementById("brand").value; //required
          brand2  = '-' + document.getElementById("brand2").value; //optional
          brand3  = '-' + document.getElementById("brand3").value; //optional
          medium  = '-_-' + document.getElementById("medium").value; //required
          product = '&cm_mmca1=" + document.getElementById("product").value; //optional

          if (url.includes('?')) {
              url = url + '&cm_mcc=';
          } else {
              url = url + '?cm_mmc=';
          }

          document.getElementById("fullURL").innerHTML = "URL: " + url + source + campaignId + brand + brand2 + brand3 + medium + product ;
       }

现在,url 部分效果很好。只要我在我创建的表单中的文本框中输入 URL,它就会打印到屏幕上,并在我进行更改时更新。问题来自我打印到屏幕上的附加值。每个变量document.getElementById 的所有内容都会立即打印到屏幕上。这适用于必需变量,但不适用于可选变量。我认为解决方案是防止将所有字段传递给document.getElementById("fullURL").innerHTML,除非该字段中有值,但我不知道该怎么做。有什么建议吗?

【问题讨论】:

  • 我知道很难找到正确的搜索词,但请在发布新问题之前尝试一下。我尝试了“javascript 检查元素是否为空”,并在 SO 上找到了许多问题和答案,您可以复制代码。
  • 这能回答你的问题吗? How to check if div element is empty

标签: javascript


【解决方案1】:

您需要检查每个选项值,如果该值不是空字符串,则为变量分配一个特殊值,否则只返回一个空字符串,对连接的最终 URL 没有影响:

function buildURL() {

    url = document.getElementById("url").value;
    source = document.getElementById("source").value; //required
    campaignId = '-_-' + document.getElementById("campid").value; //required
    brand = '-_-' + document.getElementById("brand").value; //required
    medium = '-_-' + document.getElementById("medium").value; //required

    // OPTIONAL VALUES: (Use trim() to ensure no white spaces affect our checks)

    const brand2Value = document.getElementById("brand2").value.trim();
    // ( brand2Value ) ? essentially works much like ( brand2Value !== "" ) ?
    brand2 = brand2Value ? '-' + brand2Value : ""; //optional

    const brand3Value = document.getElementById("brand3").value.trim();
    brand3 = brand3Value ? '-' + brand3Value : ""; //optional

    const productValue =  document.getElementById("product").value.trim();
    product = productValue ? '&cm_mmca1=' + productValue : ""; //optional

    if (url.includes('?')) {
        url = url + '&cm_mcc=';
    } else {
        url = url + '?cm_mmc=';
    }

    document.getElementById("fullURL").innerHTML = "URL: " + url + source + campaignId + brand + brand2 + brand3 + medium + product;
}

补充说明:

  • 函数变量(urlsourcebrand 等)没有用var/let/const 声明是否有原因?

确保始终使用 let 或 const 声明变量, 否则它们将在全局范围内可用,即 我们在 JavaScript 中尽量避免的事情。

【讨论】:

  • 最初我正在查看全局变量,因为我还将这些字段中的值提交到 Google 表格,但除此之外它是/是一个新错误。现在,这段代码工作得很好,但有一个缺陷。如果我设置了一个可选值,除非我对其中一个必填字段(来源、campaignId、品牌或媒介)进行更改,否则它不会更新。看来我可能需要某种类型的 eventListener?
  • 此刻buildURL函数是如何触发的? @DK_Connection
  • 你可能需要一个事件监听器来监听 change 事件。
  • 实际上,它根本没有被函数调用触发。现在一切都是由输入到字段和下拉列表中的选择来触发的。
  • 我收回我用oninputonchange 触发它,这是我的问题。我没有在我的其他字段和下拉列表中实现这些。
猜你喜欢
  • 2021-02-25
  • 2015-06-06
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多