簡體   English   中英

無法在 perticulat blogspot 執行 javascript,但它在其他 blogspot 中工作

[英]Unable to execute javascript at a perticulat blogspot, but it work in other blogspot

我已經成功地在博客上執行了 JavaScript。 但是,我無法在特定的 blogspot 站點上執行 JavaScript。 請看看胸罩計算器 為什么它在這個水療中心不起作用? 博客上的任何 JS 都停止執行了嗎? 任何CSS問題? 請幫我弄清楚這個問題。

我沒有收到任何錯誤消息。

<form id="bra-calculator">
  <div class="title">
Enter measurements in inches</div>
<div class="half">
    <label for="rib-measurement">Enter rib measurement:</label>
    <input id="rib-measurement" name="rib-measurement" placeholder="Rib Measurement" type="number" />
    <div class="error-message">
Please enter a value greater than or equal to 24</div>
</div>
<div class="half">
    <label for="bust-measurement">Enter bust measurement:</label>
    <input id="bust-measurement" name="bust-measurement" placeholder="Cup Measurement" type="number" />
    <div class="error-message">
Your bust measurement must be at least 1 inch larger than rib</div>
</div>
<input id="submit" type="submit" value="Calculate!" />
</form>
<div id="bra-results">
</div>

對於JS:

var bra_calculator = bra_calculator || (function() {

  var inputs = document.getElementsByTagName('input'),
    ribs_input = document.getElementById('rib-measurement'),
    bust_input = document.getElementById('bust-measurement'),
    validation_flag = false,
    results_div = document.getElementById('bra-results');

  function results_message(message) {
    results_div.innerHTML = message;
  }

  function find_sibling(input) {
    return input.nextSibling.nextSibling;
  }

  function add_error(input) {
    input.classList.add('error');
    find_sibling(input).classList.add('show');
  }

  function remove_error(input) {
    input.classList.remove('error');
    find_sibling(input).classList.remove('show');
  }

  function error_checker(input) {
    if (input.value == 0) {
      add_error(input);
    } else {
      if (input.type.toLowerCase() === 'number') {
        remove_error(input);
      }
    }
  }

  function validator() {
    // check for empty values
    for (i = 0; i < inputs.length; ++i) {
      error_checker(inputs[i]);
    }

    // rib measurement should be be >= 24
    if (ribs_input.value < 24) {
      add_error(ribs_input);
    } else {
      remove_error(ribs_input);
    }

    // bust should be at least 1 inch greater than ribs!
    if (bust_input.value !== '' && ribs_input.value !== '') {
      if (Number(bust_input.value) <= Number(ribs_input.value)) {
        add_error(bust_input);
      } else {
        remove_error(bust_input);
      }
    }

    if (!ribs_input.classList.contains('error') && !bust_input.classList.contains('error')) {
      validation_flag = true;
    } else {
      validation_flag = false;
      results_message('');
    }

    if (validation_flag) {
      var cup_sizes = ['A', 'B', 'C', 'D', 'DD', 'E', 'F', 'FF', 'G', 'GG', 'H', 'HH', 'J', 'JJ', 'K', 'KK', 'L', 'LL', 'M', 

'MM', 'N', 'O', 'OO'],
        bust = Math.ceil(bust_input.value),
        ribs = Math.ceil(ribs_input.value),
        difference = (bust - ribs) - 1;

      if (cup_sizes[difference] === null) {
        results_message('Your size is out-of-range! Please try again.');
      } else {
        results_message('Your calculated size is: <span>' + ribs + cup_sizes[difference] + '</span>');
      }
    }
  }

  return {
    validator: validator
  }
})();

(function() {
  document.getElementById('bra-calculator').addEventListener('submit', function(e) {
    e.preventDefault();
    bra_calculator.validator();
  });
})();

我的問題是為什么它適用於一個而不適用於另一個? 請單擊兩個鏈接並查看差異。

我在https://srilanka-massage.blogspot.com/p/bra-size-calculator.html上看到以下錯誤

在此處輸入圖片說明

在此處輸入圖片說明

這告訴我我們需要修改:

function remove_error(input) {
    input.classList.remove('error');
    let sibling = find_sibling(input);
    if (sibling){
        sibling.classList.remove('show');
    }
  }

或另一個類似的錯誤處理。 (或者找出為什么找不到兄弟,可能是 HTML 結構問題?)

我在 CodePen 中復制了這個問題: https ://codepen.io/Alexander9111/pen/vYOBero

真正的錯誤是網站上缺少此<div id="bra-results"></div> https://srilanka-massage.blogspot.com/p/bra-size-calculator.html

當我在表單后添加這個標簽時,一切正常:

在此處輸入圖片說明

但是,您的代碼仍然會產生其他錯誤。

您的函數function find_sibling(input)沒有返回您期望的節點。

您應該將其更改為:

  function find_sibling(input) {
    if (input.id.includes('measurement')){
      return input.parentNode.querySelector('div');
    } else {
      return input.nextSibling.nextSibling;
    }    
  }

您還應該更改:

  function add_error(input) {
    input.classList.add('error');
    let sibling = find_sibling(input);
      if (sibling.classList){
          find_sibling(input).classList.add('show');
      }    
  }

並像我說的那樣在表單之后添加 HTML: <div id="bra-results"></div> ,然后一切都應該工作:)

有關完整演示和完整代碼,請參閱我的 CodePen: https ://codepen.io/Alexander9111/pen/vYOBero

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM