我有一个输入字段,我尝试制作自动填充建议.代码看起来像
<input type="text" id="myinput">
<div id="myresults"></div>
Run Code Online (Sandbox Code Playgroud)
在输入blur()事件中我想隐藏结果'div:
$("#myinput").live('blur',function(){
$("#myresults").hide();
});
Run Code Online (Sandbox Code Playgroud)
当我在输入中写入内容时,我向服务器发送请求并获取json响应,将其解析为ul-> li结构并将此ul放到我的#myresultsdiv中.
当我点击这个解析的li元素时,我想将值从li设置为input并隐藏#myresultsdiv
$("#myresults ul li").live('click',function(){
$("#myinput").val($(this).html());
$("#myresults").hide();
});
Run Code Online (Sandbox Code Playgroud)
一切都很顺利,但是当我点击我的li blur()事件之前触发click()并且输入的值不会得到li的html.
我怎么能click()在之前设置活动blur()?
我发现有时我需要迭代一些集合并为每个元素进行ajax调用.我希望在转移到下一个元素之前返回每个调用,这样我就不会向服务器发送请求 - 这通常会导致其他问题.我不想将异步设置为false并冻结浏览器.
通常这涉及设置某种迭代器上下文,我逐步通过每个成功回调.我认为必须有一个更简洁的方式?
有没有人有一个聪明的设计模式,如何通过一个集合为每个项目制作ajax调用整齐地工作?
我第一次使用jQuery.queue()并且还没有完全掌握它.有人可以指出我做错了什么吗?
看着firebug,我仍然看到我的POST请求同时被触发 - 所以我想知道我是否在错误的地方调用dequeue().
另外 - 我怎样才能获得队列长度?
我需要对这些请求进行排队的原因是,单击按钮会触发它.并且用户可以快速连续点击多个按钮.
试图剥离我的代码的基本结构:
$("a.button").click(function(){
$(this).doAjax(params);
});
// method
doAjax:function(params){
$(document).queue("myQueueName", function(){
$.ajax({
type: 'POST',
url: 'whatever.html',
params: params,
success: function(data){
doStuff;
$(document).dequeue("myQueueName");
}
});
});
}
Run Code Online (Sandbox Code Playgroud) 我需要严格按顺序调用一堆函数.下一个函数等到前一个函数完成之前,这一点也非常重要.
现在我正在使用链式回调:
callMe1(function(){
callMe2(function(){
callMe3(function(){
callMeFinal();
});
});
});
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎有点难看.
对于不同方法的任何建议?
我正在研究一个项目,我遇到了一个问题,因为事情并没有按照我希望它们发生的顺序发生.所以我一直在考虑设计某种Queue,我可以用它来组织函数调用和启动期间使用的其他各种JavaScript/jQuery指令,即在页面加载时.我正在寻找的并不一定需要是一个队列数据结构,而是一些能够确保事物以我指定的顺序执行的系统,并且只有当前一个任务完成后,新任务才能开始.
我简要地看了一下jQuery Queue和AjaxQueue,但我真的不知道它们是如何工作的所以我不确定这是否是我想采取的方法......但我会继续阅读有关这些工具的更多信息.
目前,我已经设置好了内部$(document).ready(function() {...});工作,内部发生了其他工作$(window).load(function() {...});.例如,
<head>
<script type="text/javascript">
// I want this to happen 1st
$().LoadJavaScript();
// ... do some basic configuration for the stuff that needs to happen later...
// I want this to happen 2nd
$(document).ready(function() {
// ... do some work that depends on the previous work do have been completed
var script = document.createElement("script");
// ... do some more work...
});
// I want this …Run Code Online (Sandbox Code Playgroud) HTML:
<span>hello world!</span>
Run Code Online (Sandbox Code Playgroud)
js :(使用回调)
$('span').click(function() {
$(this).animate({
fontSize: '+=10px'
}, 'slow', function() {
// callback after fontsize increased
$(this).text( $(this).text() + ' rolled! ' );
});
});
Run Code Online (Sandbox Code Playgroud)
因此,每次SPAN单击时,在字体大小增加后附加文本"滚动",而不是一起发生.
它可以通过使用queue()来完成,如下所示:
js :(使用queue())
$('span').click(function() {
$(this).animate({
fontSize: '+=10px'
}, 'slow'})
.queue(function() {
$(this).text( $(this).text() + ' rolled! ' );
});
});
Run Code Online (Sandbox Code Playgroud)
我不确定它们之间有什么区别.都做同样的事情.
为什么queue()比使用回调更好/更喜欢(或者为什么不是)?queue()有什么特别之处?
谢谢.
我正在编写一个小的jQuery组件,它响应按钮按下而动画,也应该自动进行.我只是想知道这个函数是否递归,我不能完全解决它.
function animate_next_internal() {
$('#sc_thumbnails').animate(
{ top: '-=106' },
500,
function() {
animate_next_internal();
}
);
}
Run Code Online (Sandbox Code Playgroud)
我的实际功能更复杂,允许停止和启动,这只是一个简化的例子.
编辑它可以是否溢出堆栈,具体取决于事件在内部处理的方式.可能性:
animate()directy调用完成的回调,在这种情况下溢出是不可避免的.
animate()通过一些外部调度机制调度回调以进行调用然后终止,在这种情况下它永远不会溢出.
我正在尝试创建一个在队列中工作的效果,以便每个效果仅在前一个效果完成后才开始.我很成功,但我确信有一种更清洁的方式.
这是我到目前为止:
$("tr:last td:nth-child(1) div").slideUp(200, function() {
$("tr:last td:nth-child(2) div").slideUp(200, function() {
$("tr:last td:nth-child(3) div").slideUp(200, function() {
$("tr:last td:nth-child(4) div").slideUp(200, function() {
$("tr:last td:nth-child(5) div").slideUp(200, function() {
$("tr:last td:nth-child(6) div").slideUp(200, function() {
$("tr:last td:nth-child(7) div").slideUp(200, function() {
$("tr:last").remove();
});
});
});
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
必须有一个更清洁的方式,对吗?
事先有很多责任.
我有一个功能,但即使我打电话,它仍然继续运行stop().功能名称是function slide() { //codes here }
slide().stop();
Run Code Online (Sandbox Code Playgroud)
如何阻止它运行?
以及如何在停止后再次运行它?
所以我将完全控制它.
我是jQuery的新手,我正在尝试一个简单的程序.在这个程序中,我想要实现的是当我点击div文本然后第一行将淡出然后它将改变背景颜色然后它将淡入,所以整体它将产生缓慢改变颜色的效果,但这里发生了什么就是当我点击文本时,线条会突然改变颜色,然后它逐渐淡出然后它会淡入.所以我想知道是否有办法在执行淡出后执行换色代码.
我的节目:
$(document).ready(function(){
$("#firstDiv").click(function(){
// $(this).fadeOut(1000);
$(this).fadeOut(1000);
$(this).css("background-color", "aqua");
$(this).fadeIn(1000);
});
});
</script>
</head>
<body>
<div id="firstDiv" style="background-color: yellowgreen">
Click Me
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
jquery ×10
javascript ×5
queue ×4
ajax ×2
callback ×1
click ×1
client-side ×1
onblur ×1
recursion ×1