元素的外观仅在第二次单击时更改
Appearance of element only changes on the second click
我编写了以下脚本,允许我创建按钮,当您单击它们时将执行ajax请求。点击它后,脚本将添加类"btn-loading"到按钮,禁用它,当ajax请求成功时,脚本将把按钮更改回原始状态。
添加类和添加disabled属性在jsfiddle和我的网站上都可以正常工作,并且我在控制台中没有看到错误。
脚本:
jQuery.fn.extend({
loadingButton: function (options) {
return this.each(function () {
var btn = $(this);
btn.click(function () {
btn.addClass("btn-loading");
btn.attr('disabled','');
var ajaxCall = {
url: options.url,
type: options.type,
success: function (data) {
options.success(data);
btn.removeClass("btn-loading");
btn.removeAttr('disabled');
}
};
if (typeof (options.data) !== 'undefined') {
ajaxCall.data = options.data;
}
$.ajax(ajaxCall);
});
});
}
});
用法:
$(document).ready(function () {
$("#loadButton").loadingButton({
url: "/echo/jsonp/",
success: function(data) {
console.log(data);
}
});
});
jsfiddle
在jsfiddle中,这工作得很好。但在我的网站上,似乎只有背景图像不改变,它不会禁用按钮,当你点击它的第一次,虽然点击它的第二次工作很好。
我试着寻找一个解决方案,但是如果我不知道问题是什么,我就不知道要找什么。谁能告诉我我哪里做错了?
——编辑
这似乎与背景图像的加载时间有关。当我添加一个按钮到已经有"btn-loading"类的页面,然后单击按钮没有类,一切工作正常
我在css-tricks.com上找到了一篇关于预加载图像的文章:
使用图像预加载的一个重要原因是,如果你想在mouseOver或:hover事件中使用图像作为元素的背景图像。如果你只在CSS中为:hover状态应用背景图像,那么该图像将不会加载,直到第一个:hover事件,因此在鼠标经过该区域和图像实际显示之间会有一个短暂的恼人延迟。
这可能是我的背景图像不显示在第一次点击的原因,因为当我预加载背景图像,按钮被禁用,背景图像显示
相关文章:
- 当单击第一个李时,它显示内容一,当单击第二个李时,它显示内容二
- 单击一次后禁用按钮-第2部分
- 如何对每个用户每天只允许单击一次的按钮进行编码
- button.单击两次删除附加操作后不工作
- 为什么jQuery下拉列表需要单击两次
- 单击3次后禁用按钮
- 为每个字母单击一次
- Rails-jQuery 为什么我必须单击两次才能显示 jQuery 效果
- 对同一类中的所有元素单击一次
- 单击一次以静音,另一次单击可取消静音
- 必须单击两次才能得到一个响应
- 如何在幻灯片中添加向上滚动功能单击1次即可向下滚动
- 如何加载一个html页面并在其中只需单击一次即可运行函数
- isHidden函数要求我在应用响应显示时单击两次
- 元素必须单击两次才能添加Class(自定义指令)
- 只需单击一次按钮,jquery即可自动淡入/淡出文本
- ajax表单在第二次提交时提交了两次,在第三次提交时又提交了三次,等等
- 单击第二次轮次单击
- 单击按钮后,附加表单,第二次单击时向下滑动并向上滑动
- 首先显示一个Div,然后在表单中第二次单击按钮时提交