【问题标题】:Javascript code does not work on web hosting serverJavascript 代码在网络托管服务器上不起作用
【发布时间】:2020-05-01 04:17:42
【问题描述】:

我有一个非常奇怪的问题。我网页上的 Javascript 代码无法正常工作。奇怪的是,当我在 localhost (wamp) 上运行该页面时,一切正常,正如它应该的那样。当我将网页上传到虚拟主机时,问题就开始了,部分代码不起作用。应该调用弹出窗口(div 标签)的部分根本不起作用。单击链接时,没有任何反应。

我曾尝试使用两个不同的免费网络主机,但两者都出现了同样的问题。我还尝试运行开发人员工具 (F12),但没有出现我预期的错误,因为在 localhost 上一切正常。
这是不起作用的特定代码。

<div id="mySidenav" class="sidenav">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times</a>
     <a href="javascript:void(0)" id="myBtn">T1</a>
     <a href="javascript:void(0)" id="myBtn2">T2</a>
  <a href="javascript:void(0)" id="myBtn3">T3</a>
  <a href="javascript:void(0)" id="myBtn4">T4</a>
</div>

<script>    
  var modal = document.getElementById('myModal'); 
  var btn = document.getElementById("myBtn");   
  var span = document.getElementsByClassName("close")[0];     
  btn.onclick = function() {
    modal.style.display = "block";
  }
  span.onclick = function() {
    modal.style.display = "none";
  }
</script>
<script> 
  var modal2 = document.getElementById('myModal2');   
  var btn2 = document.getElementById("myBtn2");   
  var span2 = document.getElementsByClassName("close")[1];     
  btn2.onclick = function() {
    modal2.style.display = "block";
  }     
  span2.onclick = function() {
    modal2.style.display = "none";
  }    
</script>
<script> 
  var modal3 = document.getElementById('myModal3');
  var btn3 = document.getElementById("myBtn3");    
  var span3 = document.getElementsByClassName("close")[2];     
  btn3.onclick = function() {
    modal3.style.display = "block";
  }
  span3.onclick = function() {
    modal3.style.display = "none";
  }    
</script>
<script>    
  var modal4 = document.getElementById('myModal4');    
  var btn4 = document.getElementById("myBtn4");    
  var span4 = document.getElementsByClassName("close")[3];       
  btn4.onclick = function() {
    modal4.style.display = "block";
  }  
  span4.onclick = function() {
    modal4.style.display = "none";
  }   
</script>

我知道javascript是前端技术,它不在服务器上运行,但我真的不知道是什么原因造成的。我希望有人有类似的问题,因为我真的不知道会是什么。

【问题讨论】:

  • 欢迎来到 StackOverflow。为了提供帮助,我们需要您提供更多帮助。你说:这是不起作用的特定代码。:没有id的元素myModal(et.al.),没有类名为@的元素987654324@ 包括在这里。如果您的代码旨在显示或隐藏这些其他元素,那么了解它们的结构会很有帮助。请提供结构的其余部分。
  • @RandyCasburn 这是第一个模态内容。让我们专注于此。
  • @RandyCasburn
  • @Ricky97 你的 HTML 中声明了四种模式吗?还有为什么这么多剧本?
  • @Bibberty 是的,当然我声明了 4 个模态。每个脚本用于一个模式。我只是不明白为什么它在托管时不起作用。本地主机上的一切都很好

标签: javascript hosting


【解决方案1】:

如果我们使用functions并传递一些参数,我们可以简化很多代码。

另外,我们可以使用事件委托,而不是为每个对象添加监听器,这对于动态HTML和重复元素结构非常有效。

注意我们如何使用matches 测试event.target

我已经为演示制作了模态。

// First lets use a functions
const showModal = (modalId) => {
  const modal = document.querySelector(`#${modalId}`);
  modal.style.display = 'block';
};

const hideModal = (modalId) => {
  const modal = document.querySelector(`#${modalId}`);
  modal.style.display = 'none'; 
};

// Now lets listen for any click
document.addEventListener('click', (e) => {
  // Based on what was clicked we will do something.
  if(e.target.matches('.showmodal')) showModal(e.target.dataset.modal);
  
  if(e.target.matches('.close')) hideModal(e.target.parentNode.id);

});
.modal {
  margin-top: 25px;
  padding: 15px;
  color: white;
  background-color: blue;
  border-radius: 7px;
  display: none;
}

span.close {
  float: right;
  font-weight: bold;
}
<div id="mySidenav" class="sidenav">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times</a>
     <a href="#" id="myBtn" class="showmodal" data-modal="myModal">T1</a>
     <a href="#" id="myBtn2" class="showmodal" data-modal="myModal2">T2</a>
  <a href="#" id="myBtn3" class="showmodal" data-modal="myModal3">T3</a>
  <a href="#" id="myBtn4" class="showmodal" data-modal="myModal4">T4</a>
</div>

<div id="myModal" class="modal">Modal 1 <span class="close">Close Me</span></div>
<div id="myModal2" class="modal">Modal 2 <span class="close">Close Me</span></div>
<div id="myModal3" class="modal">Modal 3 <span class="close">Close Me</span></div>
<div id="myModal4" class="modal">Modal 4 <span class="close">Close Me</span></div>

【讨论】:

    【解决方案2】:

    最大的问题是由window.onload=function() 之类的函数造成的。如果有另一个 Javascript 具有相同的代码,那么它们将相互等待直到永恒。

    只需将 javascript 添加到网站底部,即正文之后。

    您必须将代码放在head 上,并且网站无法看到元素myModal2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      相关资源
      最近更新 更多