jQuery 踩坑记
目录
开发项目时踩到的坑。
包含 jQuery 库 #
可以下载到项目目录里通过相对路径调用,不过我更偏向于通过 cdn 来包含这些开源库:
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
新增元素 click 事件 #
对于通过 js 新增加到 html 中的元素,jQuery 原来的 选择器. click() 会失效。
解决方法是采用 .on() 方法绑定到 body。例如:
$(document).on('click', '.exp', function() {...});
就相当于原来的 $('.exp').click(function() {...});。
ajax 发送表单数据 #
发送表单数据(FormData)时,需要将 processData 和 contentType 设置为 false,否则无法正确传输。
$.ajax({
method: 'POST',
url: url,
dataType: 'JSON',
data: fData,
cache: false,
processData: false,
contentType: false,
...
});
ajax 异步修改变量值 #
由于 ajax 发送异步请求(相当于并行请求),在 ajax 的 success 方法里想要修改变量的值是比较困难的。如果想要修改变量值,一般都会设置 async: false 来强制发送同步请求,但这样也就让 ajax 失去了意义。
退而求其次的办法是,在 ajax 里只修改全局变量,并且推迟使用被修改变量的值。
通过循环绑定 click 事件 #
这里会遇到的问题是,所有的 click 事件都被绑定到了最后绑定的那个函数上。原因是 js 中的函数都是在调用时才被解析的。通过查阅
资料,得到的解决方法之一是采用 .each() 方法:
$('img').each(function (index) {
$(this).click(function () {
//...
});
}
这里的参数 index 表示符合选择器规则的元素的索引。例如本例中,在对应 html 中的第 3 个 <img> 标签,其 index 值就为 2。要引用索引为 index 的元素,在这里只需要 $('img').eq(index) 即可。