1

我这里的代码有一点问题。我对它很陌生,所以如果它很简单,我很抱歉。但希望有一个解释。

所以这是我的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"); 

它警告未定义。

我希望它在一个函数中,因为我不想要一行行重复的代码:(

有人可以对此有所了解吗?

4

1 回答 1

1

那是因为你$(this)仍然被叫我打赌。关键字this表示$(".one")最初,但是this当您调用函数时,then 的上下文会发生变化。如果您希望它在另一个函数中工作,则需要将变量设置为的值$(".one")并使用它而不是$(this)在函数内部。

很难得到,但thisjavascript 中的关键字始终是指函数作为方法的对象。因此,在第一种情况下,这指的是,$(".one")如果您将另一个逻辑移动到另一个函数中,则定义会更改(更改为全局对象,通常是窗口)。

我为您创建了一个 jsFiddle,显示了您正在寻找的工作示例:http: //jsfiddle.net/CKCjz/1/

于 2012-07-17T01:01:32.547 回答