2015-05-19 51 views
0

我想拉引用者的URL,應用正則表達式,並使用結果作爲文本字段中的值。問題是,當前的實現不會將引薦來源網址拖入文本字段,這可能來自點擊前一頁上的鏈接,而是允許我輸入值。它應該自動使用引用來填充文本字段,並允許用戶根據它進行搜索(或者手動搜索,如果他們以前沒有點擊過鏈接)。控制檯爲$("#imageid").val(encodeID[1]);行輸出Uncaught TypeError: Cannot read property '1' of null,因爲它試圖在結果字符串的數組中找到第二個值(這意味着沒有被引用的URL)。不知道什麼是錯我的邏輯引用URL沒有被正確抓取

案例1

有了這個邏輯,它拉的引薦URL,但不會讓用戶手動搜索(沒有引用預先填充搜索字段)

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語句,它不拉引薦URL,BU T還允許用戶搜索手動

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

只是快速的一面請注意,不需要重新分配'regexp'和'encodeID',因爲它們首先被分配在'if'語句之外。 – philtune

+0

我知道,只是更專注於這個令人討厭的小邏輯問題。 – Matt

+0

看起來正則表達式不匹配。放置'console.log(encodeID);'下面'var encodeID = regexp.exec(window.document.referrer);'並查看console.log中的輸出是什麼 – micahblu

回答

0

你有一個問題,因爲數組索引是從0開始,而不是1

if (encodeID !== null && encodeID.length == 1) { 
    $("#imageid").val(encodeID[1]); 
} 

如果encodeID已經1的長度,它只有一個元素,這將是encodeID[0],但是你想設置這將不會存在如果陣列具有1

+0

如果if(encodeID){...}'會更好一些嗎? – philtune

+0

我知道他們從0開始。數組總是會在正則表達式之後經過'assets/number,number'。我需要能夠拉下第二個數字的值。 – Matt

+0

@Matt是的,但是你的邏輯被破壞了。您正在測試'length == 1 .. ..如果你的正則表達式匹配,你將有一個長度爲2的數組,而不是長度爲1. –

0

一個長度等於encodeID[1]值以便將溶液於陣列長度設定爲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]); 
}