簡體   English   中英

未捕獲的TypeError:undefined不是函數javascript函數

[英]Uncaught TypeError: undefined is not a function javascript function

我編寫了“氣泡排序”功能來對圖像列表進行排序。 我不明白為什么該函數返回“ Uncaught TypeError:undefined不是一個函數”。 誰能幫我?

$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];
}

代替list[pos]使用list.eq(pos)因為第一個元素是原始HTML元素(不具有attr函數),第二個元素是jQuery對象(具有attr函數)

還使用list.length而不是list.size()因為自版本1.8開始不推薦使用size函數

最后,正如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/

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

必須寫成:

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

下面的行也一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM