Reputation: 1137
I have this JS pagination code that works almost like I want it to, except from that I want the selected-page
class to be added to the first page number <a>
before it is clicked? Now it is only added after the current page is clicked.
(function($) {
$(function() {
$.widget("zpd.paging", {
options: {
limit: 5,
rowDisplayStyle: 'block',
activePage: 0,
rows: []
},
_create: function() {
var rows = $("tbody", this.element).children();
this.options.rows = rows;
this.options.rowDisplayStyle = rows.css('display');
var nav = this._getNavBar();
this.element.after(nav);
this.showPage(0);
},
_getNavBar: function() {
var rows = this.options.rows;
var nav = $('<div>', {class: 'paging-nav'});
for (var i = 0; i < Math.ceil(rows.length / this.options.limit); i++) {
this._on($('<a>', {
href: '#',
text: (i + 1),
"data-page": (i)
}).appendTo(nav),
{click: "pageClickHandler"});
}
//create previous link
this._on($('<a>', {
href: '#',
text: '<<',
"data-direction": -1
}).prependTo(nav),
{click: "pageStepHandler"});
//create next link
this._on($('<a>', {
href: '#',
text: '>>',
"data-direction": +1
}).appendTo(nav),
{click: "pageStepHandler"});
return nav;
},
showPage: function(pageNum) {
var num = pageNum * 1; //it has to be numeric
this.options.activePage = num;
var rows = this.options.rows;
var limit = this.options.limit;
for (var i = 0; i < rows.length; i++) {
if (i >= limit * num && i < limit * (num + 1)) {
$(rows[i]).css('display', this.options.rowDisplayStyle);
} else {
$(rows[i]).css('display', 'none');
}
}
},
pageClickHandler: function(event) {
event.preventDefault();
$(event.target).siblings().attr('class', "");
$(event.target).attr('class', "selected-page");
var pageNum = $(event.target).attr('data-page');
this.showPage(pageNum);
},
pageStepHandler: function(event) {
event.preventDefault();
//get the direction and ensure it's numeric
var dir = $(event.target).attr('data-direction') * 1;
var pageNum = this.options.activePage + dir;
//if we're in limit, trigger the requested pages link
if (pageNum >= 0 && pageNum < this.options.rows.length) {
$("a[data-page=" + pageNum + "]", $(event.target).parent()).click();
}
}
});
});
})(jQuery);
Upvotes: 0
Views: 1596
Reputation: 1061
Here in your _create
function you are showing page number 0.
this.showPage(0);
You can either replace this with a programmatic click on your first <a>
,
$("a[data-page='0']").click();
or simply add class name to it, instead of clicking:
$("a[data-page='0']").addClass("selected-page");
Upvotes: 1
Reputation: 5414
i think that you can do this when you create the pages links
$('<a>', {
href: '#',
text: (i + 1),
"data-page": (i),
"class": i == 0 ? "selected-page" : "" <----- ADD THIS
})
Upvotes: 1
Reputation: 7295
Without your HTML, I couldn't tell you a solution that works out of the box. However, you can write the jQuery:
$("a:first-child").addClass("selected-page");
or another selector like it.
Upvotes: 2