Default var if "$(this).attr('data-id')" is undefined
I'm learning "on the fly" so please pardon my ignorance. I'm trying to figure out how to pass a default "folderID" to my #next and #prev click functions below. Am I on the right path? Or totally off base? Thanks so much for your time. K
$(function() {
var folderID = $('.folderID').attr("data-id"); 
$("#next").click(function() {
var myInbox = "/test/SecComm/ajax_inboxResults.cfm?startRow="+nextstart;
myInbox+="&folderID="+folderID;
    $.get(myInbox,function(data){
      $("#messageList").html(data);
  });
})
$("#prev").click(function() {
var myInbox = "/test/SecComm/ajax_inboxResults.cfm?startRow="+prevstart;
myInbox+="&folderID="+folderID;
    $.get(myInbox,function(data){
      $("#messageList").html(data);
  });
})
$(".folderID").click(function() {
var folderID = $(this).attr('data-id');                               
<cfoutput>var myInbox = "/test/SecComm/ajax_inboxResults.cfm
folderID="+folderID;</cfoutput>
    $.get(myInbox,function(data){
      $("#messageList").html(data);
  });
})
})
var prevstart = 1
var nextstart = 1
function showPrev(newprev开发者_运维问答start){
prevstart = newprevstart
$("#prev").show()
}
function hidePrev(){
$("#prev").hide()
}
function showNext(newnextstart){
nextstart = newnextstart
$("#next").show()
}
function hideNext(){
$("#next").hide()
}
You could try the following:
var folderID = $(this).attr('data-id') || 1;
JS Fiddle demo
The above assigns the value of the data-attribute to the variable folderID, if the selector doesn't return a match then it assigns the default value of 1.
In 2016, and quite probably since 2015, it's possible instead to use several means of acquiring the data-id attribute-value using the DOM – as well as jQuery – those options are below:
var folderID = $(this).data('id'); // jQuery
var folderID = this.dataset.id;
var folderID = this.getAttribute('data-id');
Obviously all of these require the this to be the appropriate element from which you wish to retrieve the attribute-value.
A comment raised below points out the obvious flaw in the above:
Please note that if you have a
data-idof 0, this will use the value 1 instead (0 being a falsy value).
With that in mind it's worth revisiting the problem, to show a very similar solution but using a check that the data-id is present:
var folderID = 'undefined' !== typeof this.dataset.id ? this.dataset.id : 1;
With the above we check whether the type of (typeof) of the referenced property is not equal (!==) to undefined; if it is not equal to undefined we retrieve the value stored in that property (the property-value of this.dataset.id being the attribute-value of the data-id attribute) or, if it is undefined then we supply the value of 1.
This approach uses the Conditional (ternary) Operator, in which an expression is evaluated for true/false (or truthy/falsey) and, if the expression evaluates to true/truthy then the first statement following the ? character is used. If the expression evaluates to false/falsey then the second statement, following the :, is used:
var variableName = expression ? ifTrue : ifFalse;
References:
- JavaScript:
- Conditional (ternary) Operator.
- Element.getAttribute().
- HTMLElement.dataset.
 
- jQuery:
- attr().
- data().
 
Normal shorthand would be:
var folderID = $(this).attr('data-id') || 1;
You're on the right path, although I would store the result of your selector $(this).attr('data-id') in a variable so you don't have to perform a look up on the DOM again.
As you've already got a 'data-id' attribute on your element, you could just find the value of that attribute from within the functions.
$("#next").click(function() {
// Get the value of the custom data value
var folderID = $('.folderID').attr("data-id");
var myInbox = "/test/SecComm/inboxResults.cfm?startRow="+nextstart;
myInbox+="&folderID="+folderID;
    $.get(myInbox,function(data){
      $("#messageList").html(data);
  });
})
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论