0

これがAJAXを介して動的に書かれた私の送信ボタンです:

var htmlpage = "<div class='pages'>"
                for (i=1 ; i < pages+1 ; i++)
                    {
                        htmlpage += "<li><input type='submit' value='"+i+"' onclick='updatefilters;' /></li"
                    }
                htmlpage += "<div>"    
                htmlpage += "</ul>";

updatefilters()関数を再実行して、表示される項目を変更しようとしています。すべてのコードを見ずに概念化するのは少し難しいと思います...しかし、基本的に、送信ボタンをクリックするたびに関数を再度実行するだけです...今のところ、updatefilters is undefinedfirebugでエラーが発生します。

参考までに私のJS全体をここに示します

$(function() {
    $( "#selectable" ).selectable({
        selected: updatefilters  
    });
    getactivesession();
    function getactivesession(ev, ui){
        var i = 0;
        var actfilter, strfilter;
        var strfilterarray = new Array();
        $.ajaxSetup({cache: false})
        $.ajax({
        type: "POST",  
        async: false,
        url: 'welcome/getactivesession', 
        dataType: 'json',
        success: function (data){
            strfilter = JSON.stringify(data)
            strfilterarray = strfilter.split(',')
            for (i=0 ; i < strfilterarray.length ; i++) {
                strfilter = strfilterarray[i]
                strfilter = strfilter.replace(/[\[\]'"]+/g,'');
                var strfilterdash = strfilter.replace(/\s+/g, '-')
                actfilter = '#'+ strfilterdash
                $(actfilter).addClass('ui-selected')
            }
            updatefilters();
        }
        });
    }

    function updatefilters(ev, ui){
        // get the selected filters
        var template, html;
        var i = 0;
        var page;
        if(! page){
            page = 0; 
        }

        var $selected = $('#selectable').children('.ui-selected');
        // create a string that has each filter separated by a pipe ("|")
        var filters = $selected.map(function(){return this.id;}).get().join("\|");
        $.ajax({
            type: "POST",
            async: false,
            url: 'welcome/updatefilters',
            dataType: 'json', 
            data: { filters: filters, page: page },
            success: function(data){
                var html = "";
                html += "<div id=board>"
                html += "<div class='board' id='table'>"
                html += "<div id='row'>header here</div>"
                var pages = Math.ceil(data['num_threads']/10);
                var htmlpage = "<div class='pages'>"
                for (i=1 ; i < pages+1 ; i++)
                    {
                        htmlpage += "<li><input type='submit' value='"+i+"' onclick='updatefilters;' /></li"
                    }
                htmlpage += "<div>"    
                htmlpage += "</ul>";
                htmlpage += "</br>";
                html += htmlpage;
                for (i=0 ; i < data['threads'].length ; i++)
                {
                    html += "<div id=row>";
                    html += "   <div id='author' style='background: url("+data['threads'][i].location + ") no-repeat; background-position: center;'><p>"+data['threads'][i].username + "</p></div>";
                    html += "   <div id='arrow'></div>";
                    html += "   <div id='subject' title='"+ data['threads'][i].body +"'>";
                    html += "       <a href=thread/" + data['threads'][i].slug + ">"+ data['threads'][i].subject +"</a><p>Created: "+data['threads'][i].posttime+"</p></div>";                    
                    html += "   <div id='info'>";
                    html += "       <div id='replies'>" + data['threads'][i].replies_num + "</div>";
                    html += "       <div id='lastpost'>"+ data['threads'][i].lastreply+"</div>";
                    html += "   </div>";
                    html += "</div>";
                }
                html += "</div></div>";
                $('#board').html(html);
            }
        });
    } 
});
4

1 に答える 1

1

このアプローチにはいくつかの問題があるようです。

まず、onclickハンドラーで実際に関数を呼び出しているわけではありません。

htmlpage += "<li><input type='submit' value='"+i+"' onclick='updatefilters;' /></li"

する必要があります:

htmlpage += "<li><input type='submit' value='"+i+"' onclick='updatefilters();' /></li"

次に、updatefilters無名関数が実行されるグローバルスコープから関数にアクセスできません。function updatefilters(ev, ui)コールバックの外側onload、おそらくスクリプトブロックの先頭に移動する必要があります。

于 2012-06-11T16:31:11.070 に答える