Javascript jQuery插件函数中的Bind函数
我正在尝试在div中实现一个带有过滤选项的无限滚动,当用户停止在框中键入时,过滤应该可以工作 Html: 及 都被称为,而不仅仅是第一个,将糟糕的html添加到div中。大多数情况下只调用jQuery(document)。ready被称为,,这正是我需要的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({})开头,因此不需要在插件
还有,为什么每次调用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();
}
});