on.click 无法处理 class 我添加了 .addclass
on.click not working on class I added with .addclass
我正在尝试在 class 上使用 jquery .click 函数,我已将其添加到上一个 .click 上的相同 div。新的 class 正确地添加到 div 但我的 $( ".two" ).click(function() 没有运行。我的第一个 $(".one").click(function ) 运行良好。我想知道我是否使用了奇怪的逻辑或者是否有问题。任何帮助将不胜感激!
<script>
$(document).ready(function() {
$( ".one" ).click(function() {
$('.adventurevideoviewmore').addClass('two');
$( ".adventure2" ).slideDown( 1000, function() {
});
});
$( ".two" ).click(function() {
$( ".adventure3" ).slideDown( 1000, function() {
});
});
});
</script>
这是我的 HTML
<div class="adventure2"></div>
<div class="adventure3"></div>
<div class="adventurevideoviewmore one" ><img src="images/homepage/viewmorebutton.png"/></div>
您需要使用事件委托:
$( "body" ).on('click', '.two', function() {
$( ".adventure3" ).slideDown( 1000, function() {
});
您的 $('.two')
单击函数是 $(document).ready()
上的 运行,但当时 class 不存在任何元素,因此该函数未绑定任何内容。您需要做的是在动画结束时添加 .two
class 时向元素添加点击处理程序:
$(document).ready(function() {
$( ".one" ).click(function() {
$('.adventurevideoviewmore').addClass('two');
$( ".adventure2" ).slideDown( 1000, function() {
$( ".two" ).click(function() {
$( ".adventure3" ).slideDown( 1000, function() {});
});
});
});
});
这可能会让您头疼,因为用户仍然可以单击 .one
元素并再次添加处理程序。看起来您正在尝试创建某种向导。如果是这样,我建议采取稍微不同的方法。
HTML
包装冒险是某种容器,如果它还没有的话
<div class="adventure-wizard" data-step="1" data-last="3">
<div class="adventure1"></div>
<div class="adventure2"></div>
<div class="adventure3"></div>
<div class="adventurevideoviewmore"><img src="images/homepage/viewmorebutton.png"/></div>
</div>
JavaScript
维护容器数据的状态,而不是 class元素的状态。这允许您查看更多按钮始终使用相同的处理程序并增加向导。
$(document).ready(function() {
// Setup the click event on the view more button to increment the step and
// animate the appropriate adventure element until the last is reached
$('.adventureviewmore').click(function () {
var wizard = $(this).parent();
var step = wizard.data('step');
var last = wizard.data('last');
// If the end is reached do nothing
if (step === last)
return;
// Increment the step
step++;
// Animate the adventure for the next step
$('.adventure' + step).slideDown(1000);
// Store the step back on the wizard
wizard.data('step', step);
});
});
});
我在添加第 2 个 'two' class 时需要添加一个 .delay,这样 .adventure3 幻灯片就不会同时触发。非常感谢@Milind Anantwar、@Alexander 和@juan Mendes!
<script>
$( ".one" ).click(function() {
$( ".adventure2" ).slideDown( 1000, function() {
});
$(".adventurevideoviewmore").delay(1000).queue(function(next){
$(this).addClass("two");
next();
});
});
$( "body" ).on('click', '.two', function() {
$( ".adventure3" ).slideDown( 1000, function() {
});
});
</script>
这是工作代码的 fiddle:http://jsfiddle.net/cbart7421/j4er8r91/3/
我正在尝试在 class 上使用 jquery .click 函数,我已将其添加到上一个 .click 上的相同 div。新的 class 正确地添加到 div 但我的 $( ".two" ).click(function() 没有运行。我的第一个 $(".one").click(function ) 运行良好。我想知道我是否使用了奇怪的逻辑或者是否有问题。任何帮助将不胜感激!
<script>
$(document).ready(function() {
$( ".one" ).click(function() {
$('.adventurevideoviewmore').addClass('two');
$( ".adventure2" ).slideDown( 1000, function() {
});
});
$( ".two" ).click(function() {
$( ".adventure3" ).slideDown( 1000, function() {
});
});
});
</script>
这是我的 HTML
<div class="adventure2"></div>
<div class="adventure3"></div>
<div class="adventurevideoviewmore one" ><img src="images/homepage/viewmorebutton.png"/></div>
您需要使用事件委托:
$( "body" ).on('click', '.two', function() {
$( ".adventure3" ).slideDown( 1000, function() {
});
您的 $('.two')
单击函数是 $(document).ready()
上的 运行,但当时 class 不存在任何元素,因此该函数未绑定任何内容。您需要做的是在动画结束时添加 .two
class 时向元素添加点击处理程序:
$(document).ready(function() {
$( ".one" ).click(function() {
$('.adventurevideoviewmore').addClass('two');
$( ".adventure2" ).slideDown( 1000, function() {
$( ".two" ).click(function() {
$( ".adventure3" ).slideDown( 1000, function() {});
});
});
});
});
这可能会让您头疼,因为用户仍然可以单击 .one
元素并再次添加处理程序。看起来您正在尝试创建某种向导。如果是这样,我建议采取稍微不同的方法。
HTML
包装冒险是某种容器,如果它还没有的话
<div class="adventure-wizard" data-step="1" data-last="3">
<div class="adventure1"></div>
<div class="adventure2"></div>
<div class="adventure3"></div>
<div class="adventurevideoviewmore"><img src="images/homepage/viewmorebutton.png"/></div>
</div>
JavaScript
维护容器数据的状态,而不是 class元素的状态。这允许您查看更多按钮始终使用相同的处理程序并增加向导。
$(document).ready(function() {
// Setup the click event on the view more button to increment the step and
// animate the appropriate adventure element until the last is reached
$('.adventureviewmore').click(function () {
var wizard = $(this).parent();
var step = wizard.data('step');
var last = wizard.data('last');
// If the end is reached do nothing
if (step === last)
return;
// Increment the step
step++;
// Animate the adventure for the next step
$('.adventure' + step).slideDown(1000);
// Store the step back on the wizard
wizard.data('step', step);
});
});
});
我在添加第 2 个 'two' class 时需要添加一个 .delay,这样 .adventure3 幻灯片就不会同时触发。非常感谢@Milind Anantwar、@Alexander 和@juan Mendes!
<script>
$( ".one" ).click(function() {
$( ".adventure2" ).slideDown( 1000, function() {
});
$(".adventurevideoviewmore").delay(1000).queue(function(next){
$(this).addClass("two");
next();
});
});
$( "body" ).on('click', '.two', function() {
$( ".adventure3" ).slideDown( 1000, function() {
});
});
</script>
这是工作代码的 fiddle:http://jsfiddle.net/cbart7421/j4er8r91/3/