[英]How to show hidden div immediately after clicking on link
因此,我创建了一个函数,当您单击按钮时,某个div
会显示其自己的内容。 再次单击该按钮时,该div
将隐藏,并显示另一个div
。 当未选择其他三个div时,此div
将始终显示。
问题是当我添加带有连接到每个div
的锚链接的href
标签时,必须在按钮上单击两次,然后隐藏的div才会显示。
在此处检查小提琴: http : //jsfiddle.net/449r8Lwv/
如您所见,当您单击其中一个按钮时,除了url更改之外,什么都没有发生,这是一件好事。 但是单击同一按钮上的AGAIN可以显示隐藏的div。 这不是我想要的,我希望您第一次单击该按钮时显示div。
另外,当直接转到其中带有锚点名称的url时,它将立即显示具有与锚点连接的内容的div,这是一件好事。 但是,如果再次单击另一个按钮,它将显示通常在未选择任何一个div时通常必须显示的div(不是这种情况)。
示例:您转到网址website.com/test.html#2。 然后,当您单击按钮3时,则必须显示连接的div的内容(“ 3”),但只有在没有连接到div的情况下才显示该div(名为#text),按钮出现。
HTML:
<a href="#1">1</a>
<a href="#2">2</a>
<a href="#3">3</a>
<br><br><br>
<div id="clicks">
<a class="click" id="showInfo" data-target=".1"><button>1</button></a>
<a class="click" id="showDataInput" data-target=".2"><button>2</button></a>
<a class="click" id="showHistory" data-target=".3"><button>3</button></a>
</div>
<div class="1 target" style="display: none;"><a name="1">1</a></div>
<div class="2 target" style="display: none;"><a name="1">2</a></div>
<div class="3 target" style="display: none;"><a name="1">3</a></div>
<div id="text">"I WANT THIS DIV GONE EVERYTIME I LET DIV 1, 2 OR 3 SHOW BY CLICKING THE BUTTONS. BUT SHOW UP AGAIN WHEN 1, 2 OR 3 IS NOT SHOWING/SELECTED"</div>
的JavaScript / jQuery的
<script>
$(document).ready(function () {
var $targets = $('.target');
$('#clicks .click').click(function () {
var $target = $($(this).data('target')).toggle();
$targets.not($target).hide();
$('#text').css('display', $('div.target:visible').length ? 'none':'')
/*$('#contact_info').toggle(!$targets.is(':visible'));*/
});
});
</script>
<script>
function doToggle(num) {
var target = $('div.target' + num);
target.toggle();
$('.target').not(target).hide();
$('#text').css('display', $('div.target:visible').length ? 'none' : '')
}
$('#clicks .click').click(function () {
var num = $(this).data('target');
doToggle(num);
});
function handleHash() {
doToggle("." + location.hash.substring(1));
}
window.onhashchange = handleHash;
$(handleHash);
</script>
非常感谢。
ps:在小提琴中,由于某些问题,我只放置了第二个脚本部分,而我也放置了另一部分。 如果在本地测试,则应使用整个JavaScript / jQuery部分。
由于URL正在更改,因此需要在代码的主要部分中放入doToggle(..)。
另一个问题是数据目标。 jQuery可以将数字评估为数字。 因此,.1将变为0.1。 我们可以添加。 在JS中。
<div id="clicks">
<a href="#1" class="click" id="showInfo" data-target="1"><button>1</button></a>
<a href="#2" class="click" id="showDataInput" data-target="2"><button>2</button></a>
<a href="#3" class="click" id="showHistory" data-target="3"><button>3</button></a>
</div>
<div class="1 target" style="display: none;"><a name="1">1</a></div>
<div class="2 target" style="display: none;"><a name="1">2</a></div>
<div class="3 target" style="display: none;"><a name="1">3</a></div>
<div id="text">"I WANT THIS DIV GONE EVERYTIME I LET DIV 1, 2 OR 3 SHOW BY CLICKING THE BUTTONS. BUT SHOW UP AGAIN WHEN 1, 2 OR 3 IS NOT SHOWING/SELECTED"</div>
和JavaScript:
function doToggle(num) {
var target = $('div.target' + num);
target.toggle();
$('.target').not(target).hide();
$('#text').css('display', $('div.target:visible').length ? 'none' : '')
}
$('#clicks .click').click(function () {
var num = '.' + $(this).data('target');
if (num === '.' + location.hash.substring(1)) {
doToggle(num);
}
});
function handleHash() {
doToggle("." + location.hash.substring(1));
}
if (location.hash.substring(1).length > 0) {
doToggle('.' + location.hash.substring(1));
}
window.onhashchange = handleHash;
$(handleHash);
编辑:在您之前的脚本中,doToggle在工作,但执行后,URL会更改,使其看起来像doToggle在工作。 仅当哈希网址与切换后的div相同时,点击处理程序才应执行切换。
我建议您删除数据目标属性中的点。
因此,您的HTML将如下所示:
<a href="#1">1</a>
<a href="#2">2</a>
<a href="#3">3</a>
<br><br><br>
<div id="clicks">
<a class="click" id="showInfo" data-target="1"><button>1</button></a>
<a class="click" id="showDataInput" data-target="2"><button>2</button></a>
<a class="click" id="showHistory" data-target="3"><button>3</button></a>
</div>
<div class="1 target" style="display: none;"><a name="1">1</a></div>
<div class="2 target" style="display: none;"><a name="1">2</a></div>
<div class="3 target" style="display: none;"><a name="1">3</a></div>
<div id="text">"I WANT THIS DIV GONE EVERYTIME I LET DIV 1, 2 OR 3 SHOW BY CLICKING THE BUTTONS. BUT SHOW UP AGAIN WHEN 1, 2 OR 3 IS NOT SHOWING/SELECTED"</div>
您可以在这里尝试。
您的代码中存在缺陷,这就是为什么需要两次单击才能显示div的原因。
缺陷:当用户单击链接/按钮时,第一次说您的click和onhashchange处理程序将被逐个触发。 即clickHandler首先显示div 1,它再次被onhashchange handler调用隐藏。
下次当您单击相同的链接时,“不会发生哈希更改”,因此只会触发Click处理程序,从而正确显示div。
解决方案:由于您的要求的性质,我建议您仅应使用单击处理程序。 或者,如果它不符合您的要求,则可以设置全局变量以跟踪是否触发了一个事件并在调用hashchangehandler中的doToggle之前检查其值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.