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中完成了非常简单的pub/sub.
// subscribe
$( window ).on("someEvent", function() { ... });
// publish
$( window ).trigger("someEvent");
Run Code Online (Sandbox Code Playgroud)
但是我最近了解了新的回调功能,这似乎是在jQuery中处理pub/sub的推荐方法.
使用回调有什么好处,而不仅仅是在窗口上绑定?对于像上面这样的简单系统,使用回调功能是否过度杀伤?
编辑:这里有更多关于我如何使用上述内容的信息......
这有点我有时会允许我的jQuery插件相互通信.例如,我有自己的需要通信的可拖动和可放置的插件.
当拖动开始,更新和停止时,可拖动插件会触发窗口上的自定义事件.droppable插件会监视这些事件并做出相应的反应.
// in draggable
onStart: function() {
$( window ).trigger("dragger.start", [data]);
}
// in droppable
$( window ).on("dragger.start", function(event, data) {
...
});
Run Code Online (Sandbox Code Playgroud) 直接的业务:
我有一个jquery事件监听器,如下所示:
$(".number").click(printNumber);
Run Code Online (Sandbox Code Playgroud)
和回调函数:
function printNumber(number){
console.log(number);
}
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以将一个参数传递给回调,所以它看起来像这样
$(".number").click(printNumber(number));
Run Code Online (Sandbox Code Playgroud)
(我知道它会立即调用该函数,但仍然有一种方法可以将参数传递给它)
先感谢您!
我正在编写一个小的jQuery组件,它响应按钮按下而动画,也应该自动进行.我只是想知道这个函数是否递归,我不能完全解决它.
function animate_next_internal() {
$('#sc_thumbnails').animate(
{ top: '-=106' },
500,
function() {
animate_next_internal();
}
);
}
Run Code Online (Sandbox Code Playgroud)
我的实际功能更复杂,允许停止和启动,这只是一个简化的例子.
编辑它可以是否溢出堆栈,具体取决于事件在内部处理的方式.可能性:
animate()directy调用完成的回调,在这种情况下溢出是不可避免的.
animate()通过一些外部调度机制调度回调以进行调用然后终止,在这种情况下它永远不会溢出.
我正在编写一个jQuery插件,所以我可以在很多地方重用这个代码,因为它是一个非常好用的代码片段,代码本身为一个已经从隐藏行克隆的表添加了一个新行,它继续在新行上执行大量操作.
我目前正在引用它:
$(".abc .grid").grid();
Run Code Online (Sandbox Code Playgroud)
但是我希望包含一个回调函数,因此调用插件的每个区域都可以在添加行时执行更独特的操作.我之前使用过jQuery AJAX插件,因此使用了success回调函数,但无法理解代码在后台如何工作.这就是我想要实现的目标:
$(".abc .grid").grid({
row_added: function() {
// do something a bit more specific here
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的插件代码
(function($){
$.fn.extend({
//pass the options variable to the function
grid: function() {
return this.each(function() {
grid_table=$(this).find('.grid-table > tbody');
grid_hidden_row=$(this).find('.grid-hidden-row');
//console.debug(grid_hidden_row);
$(this).find('.grid-add-row').click(function(event) {
/*
* clone row takes a hidden dummy row, clones it and appends a unique row
* identifier to the id. Clone maintains our jQuery binds
*/
// get the last id
last_row=$(grid_table).find('tr:last').attr('id');
if(last_row===undefined) …Run Code Online (Sandbox Code Playgroud) 有关如何step在jQuery 1.6+中扩展-function的任何想法?
我做了一个特殊事件来触发custom-event每个动画步骤.但是,由于jQuery的动画方法已经改变,或者说step函数不再可扩展($.fx.step导致为空object),因此无法用自己的东西扩展它.
(function($){
var oldStep = $.fx.step._default;
$.event.special.animating = { };
$.fx.step._default = function( fx ) {
$(fx.elem).trigger('animating', fx);
oldStep.apply( this, arguments );
};
}(jQuery));
$('#foo').animate({width: 200});
$('#foo').bind('animating', function(e, fx){
console.log(fx);
});
Run Code Online (Sandbox Code Playgroud)
任何想法如何使用更新的jQuery版本?
我是jquery的新手.假设我有一个10"a"标签的列表,它们分别附加到事件处理程序mouseover,click,mouseout.
我想要做的是迭代所有"a"元素并使用jquery触发器触发这些事件.
我面临的问题是,这些事件需要一段时间才能被触发,因此当我运行代码时,我只看到结果只在最后一个元素上发生变化.而不是中间体.
$.each($("#styles a"), function(){
console.log("picked up " + $(this));
setTimeout(qwe($(this)), 2000);
});
function qwe(obj) {
console.log(obj.attr("id"));
$.when(obj.trigger("mouseover").trigger("click").trigger("mouseout"))
.then(function () {
console.log("Changing Result Value" + $("#textTag").text());
});
}
Run Code Online (Sandbox Code Playgroud)
有没有办法按顺序链接这些事件,即
只有当第一个元素的触发动作完成时才应触发第二个元素的事件.我尝试搜索SO,但大多数文章围绕触发仅单个事件.谢谢
我正在使用一个使用 jQuery 1.2.6 的旧系统。我正在通过该函数发送 AJAX 请求jQuery.ajax。它所访问的 URL 正在发送 302 HTTP 重定向响应,并最终以 200 HTTP OK 响应结束。我已经注册了 asuccess和complete回调,但是它们都没有被调用。
我的问题是:重定向发生后是否可以/将调用任何回调?
jQuery.ajax({
type: "GET",
url: url,
data: null,
dataType: "json",
async: false,
success: function(data, textStatus) {
alert("SUCCESS CALLED: " + textStatus);
},
complete: function(xhr, status) {
alert("COMPLETE CALLED");
}
});
Run Code Online (Sandbox Code Playgroud)
注意:响应是 HTML,而不是 JSON,但是更改dataType会html改变请求。它发送OPTIONS请求而不是GET请求,并且也不再重定向。我需要这些重定向发生。
这有效:
$("#formbottom").slideUp(speed,'swing',function(){
openSubmitting();
});
Run Code Online (Sandbox Code Playgroud)
这不是:
$("#formbottom").slideUp(speed,'swing',
openSubmitting()
);
Run Code Online (Sandbox Code Playgroud)
当你有回调时,你是否总是必须有一个匿名功能?你不能只是把你要打电话的功能?
所以我对 Rails 相当陌生。
这是我的问题:
我的咖啡脚本中有一个 Ajax 调用到租户模型,编辑页面。
$("#tenant_tenantbuildinginfo").change ->
$.ajax
url: "/buildings/getgst",
dataType: "json",
data: 'buildinginfo' : $(this).val(),
success: (data) ->
console.log data
$("#tenant_gst").val data
error: (data) ->
console.log 'error'
return false
Run Code Online (Sandbox Code Playgroud)
所以这个ajax调用的想法是从建筑物控制器中的方法返回一个税率,比如“5.6”,(完美地工作)......
def getgst
d { 'gets fired' }
s = Building.get_gst_for_building(params[:buildinginfo])
d { s.to_s('F') }
@var = s.to_s('F')
respond_to do |format|
format.json { render json: @var }
end
end
Run Code Online (Sandbox Code Playgroud)
d { } 行是记录器,这就是为什么我知道正在调用该函数并返回正确值的原因。很好,到目前为止,Ajax 调用运行良好。但是,现在我的问题是解析或呈现成功函数中的返回值。
success: (data) ->
console.log data
$("#tenant_gst").val data
Run Code Online (Sandbox Code Playgroud)
AJAX 调用的这一部分在我的控制台中返回“未定义”,这真的很奇怪,因为在我的控制器操作中,我将 @var 渲染为 json,而 ajax 调用需要 …
jquery ×10
jquery-callback ×10
javascript ×4
ajax ×1
callback ×1
queue ×1
recursion ×1
redirect ×1