为什么我必须点击两次按钮才能工作,以及我如何解决这个问题
Why do I have to click twice for the button to work and how can I fix this?
除了我连续点击两次按钮后,该函数才能完美执行。
function hideable(id) {
var e = document.getElementById(id);
if (e.style.display == 'inline-block')
e.style.display = 'none';
else
e.style.display = 'inline-block';
}
<img class="user_upload" src="upload/0000000000.gif" alt="1024 KB, 500x309" title="1024 KB, 500x309" id="0000000000">
<span id="hide_image" onclick="hideable('0000000000');">hide image</span>
编辑:对不起,我应该指定。这是我已经在使用的CSS,但它仍然不起作用(即使是内联块)
img.user_upload {
height: 75px; display: inline-block; float: left;
margin: 0px 20px 10px 0px;}
因为您的<img class="user_upload" src="upload/0000000000.gif" alt="1024 KB, 500x309"title="1024 KB, 500x309" id="0000000000">
尚未包含显示样式,它在if语句中返回null,并且正在触发else情况。
尝试:
<img class="user_upload" src="upload/0000000000.gif" alt="1024 KB, 500x309" title="1024 KB, 500x309" id="0000000000" style="display:inline-block">
现在,当您运行它时,它将识别出有一个元素,并将样式设置为none。
因为您还没有将图像的显示设置为内联块。。
<img class="user_upload" src="http://placehold.it/350x150" alt="1024 KB, 500x309" title="1024 KB, 500x309" id="0000000000" style="display:inline-block">
修复问题
请参阅此处的演示
在页面加载时,您的图像似乎没有显示"内联块"。在你的css文件中添加这样的内容:
img.user_upload { display: inline-block;}
UPDATE:看起来图像甚至没有标准的显示属性。至少你不能用e.style.display
阅读它们
在开始时,没有设置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:http://jsfiddle.net/v4sc6mtb/1/
inline
-这应该适用于这两种情况:当你标记这个问题jQuery
时,你可以在jQuery:中做同样的事情,简单得多
$('#hide_image').click(function() {
$(this).prev('img').toggle();
});
onclick
属性可能是维护噩梦。Nicer可以在处理事件的同一个地方连接事件。
toggle
负责可见性检查,这样您就不会遇到这些问题
JSFiddle:http://jsfiddle.net/TrueBlueAussie/ztgLom3p/
要处理多个按钮,请在跨度上使用类而不是ID:
JSFiddle:http://jsfiddle.net/TrueBlueAussie/ztgLom3p/1/
$('.hide_image').click(function() {
$(this).prev('img').toggle();
});
如果页面中已经有jQuery,那么jQuery确实是一种可行的方法。代码通常比同等的原始JavaScript短得多,更容易阅读和维护。
- 如何解决Yii中的页面刷新问题
- 测试Angular Service解决错误回调中的promise
- 如何解决Access Control Allow Origin错误
- 如何解决这种情况下的非法调用类型错误
- 简单的ES6承诺问题-交换解决和拒绝参数
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 如何解决“;错误所请求的URL返回500-内部服务器错误”;
- 如何逃离<脚本>jquery html()中的标记.我使用了innerHTML和outerHTML来解决这个
- 如何解决'窗口未定义'终端上的节点JS出错
- Angularjs:如何在使用'解决'在$routeProvider中
- 可以't解决Javascript错误
- AJAX HTTP基本身份验证解决方案
- 为什么不'我的窗口滚动事件根本没有启动.其他答案没有解决问题
- 如何解决此错误
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- CORS故障无法解决jquery,laravel5.2
- Imacros解决解决媒体验证码
- 如何解决/解决JQuery安全异常0x80530012