我有这个HTML代码
<div class="vote">
<div data-post-id="@item.PostId" data-vote-rank="1" class="vote-arrow vote-up glyphicon glyphicon-chevron-up"></div>
<div class="total-vote">0</div>
<div data-post-id="@item.PostId" data-vote-rank="-1" class="vote-arrow vote-down glyphicon glyphicon-chevron-down"></div>
</div>
这个jQuery ajax帖子
$(".vote-arrow").click(function () {
var postId = $(this).data("post-id");
var voteRank = $(this).data("vote-rank");
$.ajax({
type: "GET",
url: "/Posts/Vote/",
data: { postId: postId, voteRank: voteRank },
context: this,
success: function () {
console.log(voteRank); //working, I get 1
if (voteRank === "1") {
console.log(voteRank); //nothing in the console
$(this).css({ 'color': 'red' });
}
alert("working");
}
});
});
success
中的if语句无效。
如果我用data-vote-rank="1"
按div,我会在控制台中从if语句外的console.log
和if语句后的alert
获得1。如果我调试if-statement条件中的voteRank是一个但是我没有在if语句中获得console.log(当然也没有颜色变化)。
有什么问题?
答案 0 :(得分:3)
使用==
或voteRank === 1
,身份(===
)运算符也会检查类型,它们必须匹配才能被视为相等。
.data()
将内部值转换为适当的数据类型。它们不是字符串。 1 === "1"
将评估为false
答案 1 :(得分:0)
在这种情况下,jQuery会将data属性转换为数字。来自documentation on .data():
每次尝试都将字符串转换为JavaScript值(包括布尔值,数字,对象,数组和null)。如果这样做不会更改值的表示,则只会将值转换为数字。例如,&#34; 1E02&#34;和&#34; 100.000&#34;等价于数字(数值100)但转换它们会改变它们的表示形式,因此它们被保留为字符串。字符串值&#34; 100&#34;转换为数字100。
您应该更改if语句的条件以反映这一点:
if (voteRank === 1) {
// snip
}
答案 2 :(得分:0)
您是否尝试将结果转换为int。 你可以在将值应用到&#34之前使用parseInt();如果&#34;条件。
$(".vote-arrow").click(function () {
var postId = $(this).data("post-id");
var voteRank = $(this).data("vote-rank");
$.ajax({
type: "GET",
url: "/Posts/Vote/",
data: { postId: postId, voteRank: voteRank },
context: this,
success: function () {
console.log(voteRank); //working, I get 1
if (parseInt(voteRank) === 1) {
console.log(voteRank); //nothing in the console
$(this).css({ 'color': 'red' });
}
alert("working");
}
});
});
答案 3 :(得分:0)
identity(===)运算符的行为与equality(==)运算符完全相同,但不进行类型转换,并且类型必须相同才能被认为是相等的。
因此在使用它之前,将左侧变量类型转换为与右侧变量类型相同。在Ur解决方案中将voteRank转换为int
voteRank = parseInt(voteRank, 10);
然后检查
if (voteRank) === 1) {
}