为什么这个Javascript函数不起作用

时间:2011-05-24 16:18:31

标签: javascript jquery

我在这里要做的是创建一个功能,为自定义选择元素执行所有功能。所以我创建了一个函数,它接受函数本身定义的三个参数(更多细节见下面的代码)。我正在尝试完成以下操作:我希望参数是各种元素的ID(例如包装器div),我希望在函数中删除这些参数。我的代码如下。非常感谢

function createList(ParentDivID,SelectMenuID,ListMenuID) {
            $('#' + ParentDivID + "'");
            $('#' + SelectMenuID + "'");
            $('#' + ListMenuID + "'");
            var options = $("#" + SelectMenuID +'"' ).find("option");

                $(options).each(function(){
                    $(ul).append('<li>' + 
                    $(this).text() + '<span class="value">' + 
                    $(this).val() + '</span></li>'); 
                    });
                var ul = '<ul id="' + ListMenuID + "></ul>";
                $('#' + ParentDivID + "'").append(ul).end().children('#' + ListMenuID + "'").hide().click(function(){$(ul).slideToggle();});
                $("#" + SelectMenuID + '"').hide();
        }
        createList(fancySelectLarge,selectWalkerType,walkerTypeLi);     

8 个答案:

答案 0 :(得分:7)

猜测一下,可能是因为您的ID不以引号字符结尾(HTML 4中的ID不允许),但是您将它们附加到您要搜索的字符串中jQuery的。

答案 1 :(得分:5)

你只需要做这样的选择器

$('#' + ParentDivID);

此外,你需要停止交换's和s,因为它会导致你错过一些收尾报价

    function createList(ParentDivID,SelectMenuID,ListMenuID) {
        var options = $('#' + SelectMenuID).find('option');

        $(options).each(function(){
            $(ul).append('<li>' + 
                $(this).text() + '<span class="value">' + 
                $(this).val() + '</span></li>'); 
        });

        var ul = '<ul id="' + ListMenuID + '"></ul>';

        $('#' + ParentDivID).append(ul).end().children('#' + ListMenuID).hide().click(function(){$(ul).slideToggle();});
        $('#' + SelectMenuID).hide();
    }

    createList(fancySelectLarge,selectWalkerType,walkerTypeLi); `

答案 2 :(得分:3)

你搞乱了所有的字符串连接,如:

$('#' + ParentDivID + "'");应为$('#' + ParentDivID);

答案 3 :(得分:1)

当您调用该函数时,您的代码中其他地方已经分配了三个参数吗?如果没有,并且实际上是字符串id属性,则需要将它们用引号括起来。

createList("fancySelectLarge", "selectWalkerType", "walkerTypeLi"); 

注意:请参阅$('#' + ParentDivID + "'");

中有关错误引用的其他有价值的回复

答案 4 :(得分:1)

这通常有点乱,但我试图尽可能多地修复。

function createList(ParentDivID,SelectMenuID,ListMenuID) {
        var options = $("#" + SelectMenuID).find("option");
        var ul = $('<ul>', {id: ListMenuID});
        $(options).each(function(){
            ul.append('<li>' + 
            $(this).text() + '<span class="value">' + 
            $(this).val() + '</span></li>'); 
        });
        $('#' + ParentDivID)
            .append(ul)
            .end()
            .children('#' + ListMenuID)
            .hide()
            .click(function() { ul.slideToggle(); });
        $("#" + SelectMenuID).hide();
}

答案 5 :(得分:0)

执行到达时,

$(ul)未定义,因为var ul稍后才被声明为几行。您还需要使用document.body.createElement('ul')而不是将'<ul ...>'放入字符串中。

此外,行$('#' + ParentDivID + "'");没有做任何事情。

答案 6 :(得分:0)

在使用之前,您需要定义ul。另外,将其定义为$('<ul.../>')而不仅仅是'<ul.../>',以便您可以从该定义创建jQuery元素。

答案 7 :(得分:0)

你也想尝试创建像这样的dom元素

$('<span class="value">')而不是字符串值'<span class="value">'