如果在函数中使用,则返回undefined值

时间:2012-07-17 00:57:31

标签: jquery function undefined

我的代码有点问题。我是相当新的,所以如果简单我道歉。但是会喜欢解释。

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

警告未定义。

我想在函数中使用它,因为我不想在重复代码行上使用行:(

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

1 个答案:

答案 0 :(得分:1)

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

很难得到,但javascript中的this关键字始终是指函数是其方法的对象。所以在第一种情况下,这引用$(".one"),而如果你将另一个逻辑移到另一个函数中,则定义会改变(转换为全局对象,通常是窗口)。

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