我不明白我在做什麼錯的,爲什麼這個代碼工作得很好:的jQuery的()變量選擇問題
$(document).on('click', '[data-slider-next]', function() {
slider('next');
});
而這打破了滑蓋的行爲:
var $slider_next_btn = $('[data-slider-next]');
$(document).on('click', $slider_next_btn, function() {
slider('next');
});
上下文:
<div class="b-slider" data-slider>
<div class="b-slider__arrow b-slider__arrow_l" data-slider-prev>←</div>
<div class="b-slider__arrow b-slider__arrow_r" data-slider-next>→</div>
<div data-slide data-content="1.1"></div>
<div data-slide data-content="1.2"></div>
<div data-slide data-content="1.3"></div>
</div>
// Slider function itself.
function slider(_direction) {
var $slide = $('[data-slide]'),
$inactive = $('[data-slide]:not([data-slide-active])'),
$active = $('[data-slide][data-slide-active]');
if ($active.length == 0) var $active = $slide.first();
var content = $active.attr('data-content');
// Functions for loaded slider.
if (_direction == 'load') {
$inactive.hide();
$active.show()
.text(content)
.attr('data-slide-active', '');
}
// Functions for any slider button.
else {
$inactive.hide();
// Functions for next slider button.
if (_direction == 'next') {
var $next = $active.next('[data-slide]').length ? $active.next('[data-slide]')
: $slide.first();
}
// Functions for prev. slider button.
else if (_direction == 'prev') {
var $next = $active.prev('[data-slide]').length ? $active.prev('[data-slide]')
: $slide.last();
}
// Functions for any slider action.
$next.show()
.text(content)
.attr('data-slide-active', '');
$active.hide().removeAttr('data-slide-active');
}
}
// Slider loaded
$('[data-slider-next]').ready(function() {
slider('load');
});
// & next button
var $slider_next_btn = $('[data-slider-next]');
$(document).on('click', $slider_next_btn, function() {
slider('next');
});
// & prev. button
var $slider_prev_btn = $('[data-slider-prev]');
$(document).on('click', $slider_prev_btn, function() {
slider('prev');
});
*「我不明白我做錯了什麼」*好吧,你不能用jQuery對象替代選擇器。如果你看看[**文檔**](http://api.jquery.com/on/#on-events-selector-data-handlereventObject),那很清楚:*「selector,string:選擇器字符串來篩選觸發事件的選定元素的後代。「*。 jQuery對象不是選擇器字符串。另外,如果我正確地認爲你正在嘗試做什麼,那麼解決方案就是直接將事件處理程序綁定到選定的元素。 –
即使嘗試使用它也沒有任何意義。如果你想將一個事件綁定到你已經擁有的一些元素上(甚至不需要委派),那麼爲什麼不使用'$ slider_next_btn.on(「click」,handler)'(在這種情況下沒有選擇器)在第一個地方......? – CBroe
@CBroe非常感謝,'$ slider_next_btn.on(「click」,handler)'是我必須使用的。我想標記爲您評論的答案如果您可以將其作爲答案發布。 –