1

我有一个 Html 下拉列表,允许用户拥有网格的页面大小。

@Html.DropDownList("PageSizes", Model.PageSizes)  

然后我有一个javascript块:

        <script type="text/javascript">
        function ChangePageSize(size, msg) {
            alert("alert inside ChangePageSize: " + msg + " " + size); //msg = from: Initial; first dropdown change (grid updates with new page size)
                                                                       //msg = from: Initial; second dropdown  change (alert pops twice, grid does not update)
            var filterPage = "/Search/Filter";
            $.ajax({
                cache: false,
                url: filterPage,
                data: { pagesize: size },
                type: 'GET',
                success: function (data) {
                alert("success" + data);                             //this alert pops twice on the second dropdown change as well, data does have html in it.
                $('#searchResults').replaceWith(data);                       
            },
                error: function () { alert('Error changing page size.'); }
            });
        }

        $(function() {
            $('body').on('change', '#PageSizes', function() {
                var size = this.value;
                if (size != 'undefined') ChangePageSize(size, "from: Initial");
            });
        });
    </script>

这只能工作一次。我也尝试过使用 bind() 和 live()。有谁知道如何正确重新绑定到更改事件?

更新:按照建议修改了 javascript 并添加了一些调试警报。该函数似乎再次与事件绑定,并且控制器操作似乎正在返回部分视图。但是为什么我的#searchResults DIV 没有再次更新?为什么 ChangePageSize 函数会被调用两次?

Update2:我找出了我的网格没有填充的原因。指定要替换的 DIV 在被替换后就消失了。我交叉手指,用同名的 DIV 围绕局部视图中的表格,并希望找到正确的 DIV 来替换。

所以这现在正在工作。我仍然担心该函数被多次调用,我猜这也会多次访问服务器。为什么会这样?

4

1 回答 1

1

改变

$(function() {
    $('#PageSizes').change(function () {
        var size = this.value;
        if (size != 'undefined')
            ChangePageSize(size);
    });
});

$(function() {
    $('body').on( "change", "PageSizes", function () {
        var size = this.value;
        if (size != 'undefined')
            ChangePageSize(size);
    });
});

这样,所有具有 id PageSizes 的元素都将具有事件处理程序,而不仅仅是与初始 document.ready 事件一起出现的那些

于 2012-10-18T15:41:26.143 回答