我的代码有点问题。我是相当新的,所以如果简单我道歉。但是会喜欢解释。
所以这是我的html:
<div class="one" data-selection="1"></div>
<p class="selections"></p>
<p class="cost">£ <span class="price">0</span></p>
这是JavaScript:
<script>
// Empty array to capture selections
var a = [];
var originalValue = "You have Selected section(s): ";
$(".one").click(function () {
if ($(this).attr('class') == "selected one") {
//alert
alert("Are you sure you wish to de-select?");
//remove from the total
$(".price").html(parseInt($(".price").html(),10) - 30)
$(this).removeClass("selected ");
// need to get remove from array
var removeItem = $(this).attr("data-selection");
a = jQuery.grep(a, function(value) {
return value != removeItem;
});
$('.selections').text(originalValue + a);
}
else {
var selection = $(this).attr("data-selection");
alert(selection);
var originalSrc = $(this).attr('class');
$(this).attr('class', 'selected ' + originalSrc);
a.push(1);
a.sort();
$('.selections').text(originalValue + a);
$('.price').text(function(i, txt) {
return +txt + 30;
});
}
});
</script>
这很好用。但是,当我将if语句的内容添加到名为:
的函数中时undoSelection()
并将代码更改为:
$(".one").click(function () {
if ($(this).attr('class') == "selected one") {
undoSelection();
}
else {
在警报询问他们是否肯定取消选择作品之后没有任何内容。如果我在那里添加警报并获取
$(this).attr("data-selection");
警告未定义。
我想在函数中使用它,因为我不想在重复代码行上使用行:(
有人可以对此有所了解吗?
答案 0 :(得分:1)
那是因为你打赌$(this)
仍然被打电话。关键字this
最初表示$(".one")
,但是当您调用该函数时this
的上下文会发生变化。如果您希望它在另一个函数中工作,您需要将变量设置为$(".one")
的值,并在函数内使用{而不是$(this)
。
很难得到,但javascript中的this
关键字始终是指函数是其方法的对象。所以在第一种情况下,这引用$(".one")
,而如果你将另一个逻辑移到另一个函数中,则定义会改变(转换为全局对象,通常是窗口)。
我为您创建了一个jsFiddle,它显示了您正在寻找的工作示例: http://jsfiddle.net/CKCjz/1/