Javascript 为什么我必须点击两次按钮才能正常工作?我如何解决这个问题?

Javascript 为什么我必须点击两次按钮才能正常工作?我如何解决这个问题?,javascript,jquery,css,toggle,double-click,Javascript,Jquery,Css,Toggle,Double Click,除了我连续两次单击按钮外,该函数执行得非常完美 可隐藏函数{ var e=document.getElementById; 如果e.style.display==“内联块” e、 style.display='none'; 其他的 e、 style.display='inline block'; } 隐藏图像当您在jQuery中标记这个问题时,您可以在jQuery中做同样的事情,而且要简单得多: $('#hide_image').click(function() { $(this).p

除了我连续两次单击按钮外,该函数执行得非常完美

可隐藏函数{ var e=document.getElementById; 如果e.style.display==“内联块” e、 style.display='none'; 其他的 e、 style.display='inline block'; }
隐藏图像当您在jQuery中标记这个问题时,您可以在jQuery中做同样的事情,而且要简单得多:

$('#hide_image').click(function() {
    $(this).prev('img').toggle();
});
onclick属性可能是维护的噩梦。最好在处理事件的同一位置连接事件

toggle负责可见性检查,所以您不会遇到这些问题

JSFiddle:

要处理多个按钮,请在跨距上使用类而不是ID:

JSFiddle:


如果页面中已经有jQuery,那么jQuery确实是一个不错的选择。代码通常比同等的原始JavaScript短得多,更易于阅读和维护。

因为您没有将图像的显示设置为内联块

<img class="user_upload" src="http://placehold.it/350x150" alt="1024 KB, 500x309" title="1024 KB, 500x309" id="0000000000" style="display:inline-block">
这就解决了问题

因为你的 尚未包含显示样式,其在if语句中返回null,并触发else case

尝试:


现在,当您运行它时,它将识别有一个元素,并将样式设置为“无”。

看起来您的图像在页面加载时没有显示内联块。在css文件中添加如下内容:

img.user_upload { display: inline-block;}
更新:看起来图像甚至没有标准的显示属性。至少你不能用e.style.display阅读它们。 开始时未设置“显示”属性,因此必须更改条件:

function hideable(id) {
   var e = document.getElementById(id);
   if(e.style.display == 'inline-block' || e.style.display == '')
      e.style.display = 'none';
   else if(e.style.display == 'none')
      e.style.display = 'inline-block';   
}
JSFiddle:


图像的标准显示属性是内联的-这应该适用于两种情况:

是的,图像的标准diplay属性是内联的-不是内联块只需将style=display:inline块添加到您的文件中,这非常有效,因为我有多个具有不同ID的节,这是更新代码的最合适的方法。谢谢@Brennan:如果你使用一个类选择器而不是ID,它将一次作用于所有按钮,因为导航是相对于单击的项目的。我将更新一个例子。
img.user_upload { display: inline-block;}
function hideable(id) {
   var e = document.getElementById(id);
   if(e.style.display == 'inline-block' || e.style.display == '')
      e.style.display = 'none';
   else if(e.style.display == 'none')
      e.style.display = 'inline-block';   
}