【问题标题】:Uncaught TypeError: undefined is not a function javascript functionUncaught TypeError: undefined is not a function javascript函数
【发布时间】:2014-12-30 07:33:41
【问题描述】:

我编写了“冒泡排序”函数来对图像列表进行排序。我不明白为什么函数返回“未捕获的类型错误:未定义不是函数”。 谁能帮帮我?

$j(document).ready(function() { 
    var list = $j("dt").find("a").find("img");

    bubbleSort(list, list.size());    
});


function bubbleSort(a, size)
{
    do {
        var swapped = false;
        for (var i = 0; i < size - 1; i++) {
            var img = getAlt(a, i);
            var img2 = getAlt(a, i + 1);

            if (img > img2) {
                var temp = a[i].attr('src');
                a[i].attr('src') = a[i + 1].attr('src');
                a[i + 1].attr('src') = temp;
                swapped = true;
            }
        }
    } while (swapped); // <----- line error
}

function getAlt(list, pos) {
    var img = list[pos].attr("alt");
    img = img.split(' ');
    return img[3];
}

【问题讨论】:

  • 哪一行导致错误?
  • a[i].attr('src') = a[i+1].attr('src');和 a[i+1].attr('src') = temp;不是有效的说明
  • JavaScript 有 .sort 用于使用二进制排序的数组。您可以提供自定义订单功能。喜欢:[1, 2].sort(function (a, b) { return b - a; });

标签: javascript jquery typeerror


【解决方案1】:

而不是list[pos] 使用list.eq(pos),因为第一种方法你得到一个原始的HTML元素(它没有attr函数),第二种方法你得到一个jQuery对象(它有一个attr函数)

同时使用list.length 代替list.size(),因为size 函数自1.8 版起已被弃用

最后如 M. Page 所述

a[i].attr('src') = a[i + 1].attr('src');

应该是

a.eq(i).attr('src', a.eq(i + 1).attr('src'));

类似的语句也是如此

如果 img 没有 alt 属性,您还应该考虑更改 getAlt 函数

function getAlt(list, pos) {
    var img = list.eq(pos).attr("alt") || "";    
    if(img) {
        img = img.split(' ');
    }
    return img[3] || "";
}

所有这些变化都可以在下面的小提琴http://jsfiddle.net/ejhq03qy/1/中找到

【讨论】:

  • +1 表示第一段,因为这会导致所描述的错误,但 .size() 是受支持的 jQuery 方法。
  • ...哦,没关系。刚刚看到它是deprecated。所以确实应该改。对不起。
  • 我做了更改但是代码生成了一个循环。我选择了另一种方式。我将所有“alt”图像放在一个数组中,然后使用“.sort () + .revert ()”。感谢您的更正。
【解决方案2】:
a[i].attr('src') = a[i+1].attr('src');

必须写:

a[i].attr('src', a[i+1].attr('src'));

下面的行也一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2015-01-14
    • 2014-07-06
    • 2014-09-01
    • 2015-11-04
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多