jQuery.inArray用外部列表失效,普通数组下功能正常
问题解决思路
核心问题有三个:
- 变量作用域冲突:你在
$.get回调里又用var blocked声明了一次变量,这会把外部的空数组blocked覆盖掉,导致按钮点击时用的还是最初的空数组。 - 异步请求时序问题:
$.get是异步加载的,页面刚加载完绑定点击事件时,TXT文件还没下载完成,blocked数组还没被填充。 - 换行符不统一:不同系统的换行符不一样,直接用
split("\n")可能会让数组里的域名带上\r(Windows系统的换行是\r\n),导致匹配失败。
修正后的代码:
$(document).ready(function () { // 只声明一次blocked变量 let blocked = []; // 处理异步请求,确保加载完成后再绑定事件 $.get("https://cdn.jsdelivr.net/gh/cokeboyyy/blackout@main/blocked.txt", function (data) { // 处理所有可能的换行符,同时过滤空行 blocked = data.split(/\r?\n/).filter(item => item.trim() !== ""); console.log(blocked); // 等域名数组加载完成后,再绑定点击事件 $("button").click(function () { const domain = $("input").val().trim(); // 去掉输入的前后空格 if (jQuery.inArray(domain, blocked) !== -1) { $("#check").html("available"); } else { $("#check").html("not available"); } }); }); });
额外优化建议:
- 用
let/const代替var,避免变量提升带来的问题 - 对用户输入的域名做
trim()处理,防止用户不小心输入空格 - 过滤TXT文件里的空行,避免数组里出现空字符串元素
内容的提问来源于stack exchange,提问作者Steven T.
相关产品推荐
相关产品推荐

