如果“$(this).attr('data-id')”未定义,则为默认值

时间:2011-10-05 16:10:47

标签: jquery ajax

我正在“即时”学习,所以请原谅我的无知。我正在试图找出如何将默认的“folderID”传递给我的#next和#prev点击下面的函数。我在正确的道路上吗?还是完全偏离基地?非常感谢你的时间。 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(newprevstart){
prevstart = newprevstart
$("#prev").show()
}

function hidePrev(){
$("#prev").hide()
}

function showNext(newnextstart){
nextstart = newnextstart
$("#next").show()
}

function hideNext(){
$("#next").hide()
}

4 个答案:

答案 0 :(得分:12)

您可以尝试以下方法:

var folderID = $(this).attr('data-id') || 1;

JS Fiddle demo

以上内容将data-attribute的值分配给变量folderID,如果选择器未返回匹配项,则会指定默认值1

在2016年,很可能从2015年开始,有可能使用几种方法来使用DOM获取data-id属性值 - 以及jQuery - 这些选项如下:

var folderID = $(this).data('id'); // jQuery
var folderID = this.dataset.id;
var folderID = this.getAttribute('data-id');

显然,所有这些都要求this是您希望从中检索属性值的适当元素。

下面提出的评论指出了上述明显的缺陷:

  

请注意,如果您的data-id为0,则会使用值1(0为假值)。

考虑到这一点,值得重新审视问题,显示一个非常类似的解决方案,但使用data-id存在的检查:

var folderID = 'undefined' !== typeof this.dataset.id ? this.dataset.id : 1;

通过上面的内容,我们检查引用属性的类型(typeof)是否不等于!==)到undefined;如果它不等于undefined,我们将检索存储在该属性中的值(this.dataset.id的属性值是data-id属性的属性值),如果它是{ {1}}然后我们提供undefined

的值

此方法使用条件(三元)运算符,其中对1 / true(或false / truthy)的表达式进行求值,如果表达式评估为falsey / true,然后使用truthy字符后面的第一个语句。如果表达式的计算结果为? / false,则使用falsey之后的第二个语句:

:

参考文献:

答案 1 :(得分:1)

正常的简写是:

var folderID = $(this).attr('data-id') || 1;

答案 2 :(得分:0)

你是在正确的道路上,虽然我会将你的选择器$(this).attr('data-id')的结果存储在一个变量中,这样你就不必再次在DOM上查找了。

答案 3 :(得分:0)

由于你的元素已经有了'data-id'属性,你可以在函数中找到该属性的值。

$("#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);
  });
})