我正在尝试提取引荐来源网址,对其应用正则表达式,并将结果用作文本字段中的值。问题是当前的实现没有将引用者URL拉入文本字段,这可能来自单击上一页上的链接,但允许我输入值。它应该使用引荐来源自动填充文本字段,并允许用户根据它进行搜索(或者手动搜索,如果他们之前没有点击链接)。控制台为行Uncaught TypeError: Cannot read property '1' of null
输出$("#imageid").val(encodeID[1]);
,因为它试图在结果字符串的数组中找到第二个值(意味着没有引用的URL被拉出)。不确定我的逻辑是什么错误
案例1
使用此逻辑,它确实会提取引荐来源网址,但不允许用户手动搜索(没有引荐来预先填充搜索字段)
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 1) {
$("#imageid").val(encodeID[1]);
} else {
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
$("#imageid").val(encodeID[1]);
}
案例2
附加 if语句,它不会提取引荐来源网址,但允许用户手动搜索
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 1){
$("#imageid").val(encodeID[1]);
}else if($("#imageid").val() !== ''){
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
$("#imageid").val(encodeID[1]);
}
用户需要能够点击引荐来源网址并让其预先填充该字段,或者手动搜索。
答案 0 :(得分:0)
您遇到了问题,因为数组从0开始编号,而不是1。
if (encodeID !== null && encodeID.length == 1) {
$("#imageid").val(encodeID[1]);
}
如果encodeID
的长度为1,则它只有一个元素,即encodeID[0]
,但您尝试设置的值等于encodeID[1]
,如果不存在则数组的长度为1。
答案 1 :(得分:0)
所以解决方法是将数组长度设置为2:
var regexp = /assets\/(\d+)/;
var encodeID = regexp.exec(window.document.referrer);
if (encodeID !== null && encodeID.length == 2){
$("#imageid").val(encodeID[1]);
}else if($("#imageid").val() !== ''){
$("#imageid").val(encodeID[1]);
}