只需单击一个按钮即可触发 2 个动作
Fire 2 actions with ONE click on a button
我正在尝试为jQuery中的按钮分配两个操作。该按钮应该:
- 打开一个隐藏的div,然后...
- 向下滚动以查看所述div。
虽然这两个操作都在按钮上工作,但它们目前需要单击2次。第一次单击时会出现div,但要将其滚动到视图中,我需要再次单击该按钮。
有什么建议我怎么出错了吗?
jQuery
$(document).ready(function () {
"use strict";
$('.footer a').click(function (event) {
event.preventDefault();
$('.impr-text').hide(); // hide previous popup div
var id = $(this).data("id"); // get the div id which to show
$('#' + id).fadeIn(function () { // show cuurent click link's popup
$(this).css({
'display': 'block'
});
});
$.scrollTo( '#impressum-footer', 800, {easing:'elasout'} );
});
});
.HTML
<div id="impressum-footer">
<div class="footer">
<div class="inner-wrap-imp">
<ul class="impressum-links">
<li><a href="#impressum-footer" class="impr-link" data-id="impr-text">Impressum</a></li>
<li>|</li>
<li><a href="#impressum-footer" class="impr-link" data-id="impr-text">Datenschutz</a></li>
<li class="impressum-button" ><a href="#impressum-footer" class="impr-link" data-id="impr-text"></a></li>
</ul>
</div>
</div>
<div id="impr-text" class="impr-text">
<div class="inner-wrap"> ...
您需要
将scrollTo
放在fadeIn
完成回调处理程序中。 这样callTo
在fadeIn
完成时执行,而不是基本上同时执行。目前,您似乎还将回调函数放置在另一个参数的位置(持续时间或选项对象,具体取决于您使用的方法签名)。 不知道为什么你在那里更改 css。
尝试这样的事情:
$(document).ready(function () {
"use strict";
$('.footer a').click(function (event) {
event.preventDefault();
$('.impr-text').hide(); // hide previous popup div
var id = $(this).data("id"); // get the div id which to show
$('#' + id).fadeIn({
duration: 100, // or whatever duration you want to use
complete: function() {
$.scrollTo( '#impressum-footer', 800, {easing:'elasout'} );
}
});
});
});
如果要在一个按钮上分配 2 个不同的操作,请将其设置为 2 个不同的类(或 ID),假设
<div class="action1 action2">
之后,在jQuery中,您将能够执行以下操作:
$('.action1').on('click', function (e) { console.log('#1'); ... });
$('.action2').on('click', function (e) { console.log('#2'); ... });
小提琴:http://jsfiddle.net/g2wdd2cb/
我现在已经设法让它开始了。@euvl解释的方法就是一个...
在我意识到它不起作用后,我更改了我的代码(滚动部分)。最终(工作)代码现在如下所示:
j查询:
$(document).ready(function () {
"use strict";
$('.footer-action-1 a').click(function (event) {
event.preventDefault();
$('.impr-text').hide(); // hide previous popup div
var id = $(this).data("id"); // get the div id which to show
$('#' + id).fadeIn(function () { // show cuurent click link's popup
$(this).css({
'display': 'block'
});
});
});
});
$(document).on('click','.footer-action-2 a', function(event) {
event.preventDefault();
var target = "#" + this.getAttribute('data-target');
$('html, body').animate({
scrollTop: $(target).offset().top
}, 2000);
});
.HTML:
<div id="impressum-footer">
<div class="footer footer-action-1 footer-action-2">
<div class="inner-wrap-imp">
<ul class="impressum-links">
<li><a href="#" class="impr-link" data-id="impr-text" data-target="impressum-footer">Impressum</a></li>
<li>|</li>
<li><a href="#" class="impr-link" data-id="impr-text" data-target="impressum-footer">Datenschutz</a></li>
<li class="impressum-button" ><a href="#" class="impr-link" data-id="impr-text" data-target="impressum-footer"></a></li>
</ul>
</div>
</div>
<div id="impr-text" class="impr-text">
<div class="inner-wrap">
现在唯一的问题是它滚动得有点太远了。当我添加偏移量时,它停止工作。
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 单击更改图标并通过javascript添加一个css类
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 如何创建一个“;表单弹出框“;在chrome中右键单击时位于突出显示的单词上方
- 复选框:一次只允许单击一个复选框
- 如何创建一个表并在单击按钮时插入此标签和文本字段
- 单击转盘按钮后重定向到另一个页面
- 如何在单击按钮时显示一个分区,同时隐藏另一个分区
- 在单击下一个按钮之前,在JavaScript代码中添加5秒的延迟
- 一个按钮中的两个onClick功能,并希望一个接一个地发生一个单击功能
- 为什么在模糊事件处理程序中添加setTimeout会修复“;掩蔽”;另一个单击处理程序的
- jQuery复选框和span共享一个单击事件
- 通过它查询谷歌地图上已经存在的标记's的lat和long,并以编程方式在其上触发一个单击事件
- 在开发元素被确认后,在开发元素下方保留一个单击按钮
- 一个.单击函数在 jQuery 中不起作用
- $('html').单击一个又一个单击事件
- 如何仅在前一个单击完成时执行下一个单击
- 如何将单击事件绑定到另一个单击元素中的元素
- 单击另一个单击事件中的定位标记