Javascript jQuery插件函数中的Bind函数

Javascript jQuery插件函数中的Bind函数,javascript,jquery,bind,document-ready,Javascript,Jquery,Bind,Document Ready,我正在尝试在div中实现一个带有过滤选项的无限滚动,当用户停止在框中键入时,过滤应该可以工作 Html: 及 都被称为,而不仅仅是第一个,将糟糕的html添加到div中。大多数情况下只调用jQuery(document)。ready被称为,,这正是我需要的 还有,为什么每次调用doneTyping()时都会调用jQuery(document).ready()?我认为应该在DOM就绪后第一次加载页面时调用它。我假设HTML中的JS代码以$(document.ready({})开头,因此不需要在插件

我正在尝试在div中实现一个带有过滤选项的无限滚动,当用户停止在框中键入时,过滤应该可以工作

Html:

都被称为,而不仅仅是第一个,将糟糕的html添加到div中。大多数情况下只调用jQuery(document)。ready被称为,,这正是我需要的


还有,为什么每次调用doneTyping()时都会调用jQuery(document).ready()?我认为应该在DOM就绪后第一次加载页面时调用它。

我假设
HTML
中的
JS
代码以
$(document.ready({})
开头,因此不需要在插件中添加
$(document.ready({})
。只需调用
loadItems()没有文档就绪事件

奇怪。第一个代码段和第二个代码段都与用户键入无关。完全相同的
jQuery(document).ready()
不可能被多次调用。@Kevin B,第四段中的函数doneTyping()。我指的是开头的文本。您说过,当用户停止键入时,会调用这两个代码段。当用户停止键入时,它们都不应被调用。
document.ready
不会因输入更改而再次触发-如果再次运行,则会有人调用它。成功时
在哪里?我知道发生了什么。多次包含jQuery(document).ready,再次初始化jscroller是导致问题的原因。每次初始化jscroller时,都在执行
jQuery(document).ready(函数(){loadItems();})
将立即执行loadItems,因为DOM已经准备好了。这对代码没有影响,不应该是这个问题的建议答案。@Archer你是说在已经初始化的插件中添加
$(文档)。准备好了吗?
:-/@MarceloPascual不,你的建议是一个很好的实践,但是,它与问题无关,也无助于解决问题。
 <div class="span2" style="margin-top: 50px;">
    <input id="Search" class="input-mysize" />

    <div id="listNav" style="height: 370px; border: 1px solid; overflow: auto; margin-right: 20px; width: 90%;">
    </div>
</div>
 $(function() {

     function onSuccess(row, container) {
        container.append('<div style="border:1px solid; cursor: hand; cursor: pointer;" >' +

                                '<table border="0">' +
                                    '<tr>' +
                                    '<td id="Location' + row.Id + '">'+
                                            '<b>Name: </b>' + row.Name + '</br >' + '<b>Address: </b>' + row.Address + '' +
                                    '</td>' +
                                    '<td onclick="locationDetails(' + row.Id + ')"> > </td>' + 
                                    '</tr>' +
                                '</table>' +
                         '</div>');

        var tdId = "Location" + row.Id;
        var element = $('#' + tdId);
        $(element).click(function() {
            google.maps.event.trigger(arrMarkers[row.Id], 'click');
        });
    };

    //...
    $('#listNav').empty();
    $('#listNav').jScroller("/Dashboard/GetClients", {
        numberOfRowsToRetrieve: 7,
        onSuccessCallback: onSuccess,
        onErrorCallback: function () {
            alert("error");
        }
    });

    //...

     $('#Search').keyup(function(){
        clearTimeout(typingTimer);
        if ($('#myInput').val) {
            typingTimer = setTimeout(doneTyping, doneTypingInterval);
        }
    });

    function doneTyping () {
        startInt = startInt + 5;
        $('#listNav').empty();
        $('#listNav').unbind();
        $('#listNav').jScroller("/Dashboard/GetClients", {
            numberOfRowsToRetrieve: 7,
            start : startInt,
            locationFilter: $('#Search').val(),
            onSuccessCallback: onSuccess,
            onErrorCallback: function () {
                alert("error");
            }
        });
    };
});
(function ($) {
"use strict";
jQuery.fn.jScroller = function (store, parameters) {

    var defaults = {
        numberOfRowsToRetrieve: 10,
        locationFilter: '',
        onSuccessCallback: function (row, container) { },
        onErrorCallback: function (thrownError) { window.alert('An error occurred while trying to retrive data from store'); },
        onTimeOutCallback: function () { },
        timeOut: 3 * 1000,
        autoIncreaseTimeOut: 1000,
        retryOnTimeOut: false,
        loadingButtonText: 'Loading...',
        loadMoreButtonText: 'Load more',
        fullListText: 'There is no more items to show',
        extraParams: null
    };
    var options = jQuery.extend(defaults, parameters);
    var list = jQuery(this),
        end = false,
        loadingByScroll = true;

    var ajaxParameters;

    if (options.extraParams === null) {
        ajaxParameters = {
            start: 0,
            numberOfRowsToRetrieve: options.numberOfRowsToRetrieve,
            locationFilter: options.locationFilter
        };
    }
    else {
        ajaxParameters = {
            start: 0,
            numberOfRowsToRetrieve: options.numberOfRowsToRetrieve,
            locationFilter: option.locationFilter,
            extraParams: options.extraParams
        };
    }

    list.html('');

    function loadItems() {
        preLoad();
        jQuery.ajax({
            url: store,
            type: "POST",
            data: ajaxParameters,
            timeOut: options.timeOut,
            success: function (response) {
                list.find("#jscroll-loading").remove();
                if (response.Success === false) {
                    options.onErrorCallback(list, response.Message);
                    return;
                }
                for (var i = 0; i < response.data.length; i++) {
                    if (end === false) {
                        options.onSuccessCallback(response.data[i], list);
                    }
                }
                if (loadingByScroll === false) {
                    if (end === false) {
                        list.append('<div><a class="jscroll-loadmore">' + options.loadMoreButtonText + '</a></div>');
                    }
                }

                ajaxParameters.start = ajaxParameters.start + options.numberOfRowsToRetrieve;

                if (ajaxParameters.start >= response.total) {
                    end = true;
                    list.find('#jscroll-fulllist').remove();
                    list.find(".jscroll-loadmore").parent("div").remove();
                }
            },
            error: function (xhr, ajaxOptions, thrownError) {
                if (thrownError === 'timeout') {
                    options.onTimeOutCallback();

                    if (options.retryOnTimeOut) {
                        options.timeOut = options.timeOut + (1 * options.autoIncreaseTimeOut);
                        loadItems();
                    }
                }
                else {
                    options.onErrorCallback(thrownError);
                }
            }
        });
    }

    function preLoad() {
        if (list.find("#jscroll-loading").length === 0) {
            list.find(".jscroll-loadmore").parent("div").remove();
            list.append('<a id="jscroll-loading">' + options.loadingButtonText + '</a>');
        }
    }

    //called when doneTyping is called and first time page loaded 
    jQuery(document).ready(function () {
        loadItems();
    });


    //called when user scrolls down in a div
    $('#listNav').bind('scroll', function () {
        if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) {
            loadItems();
        }
    });

};
})(jQuery);
jQuery(document).ready(function () {
    loadItems();
});
$('#listNav').bind('scroll', function () {
    if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) {
        loadItems();
    }
});