2015-05-19 3 views
0

Я пытаюсь вытащить URL-адрес реферера, применить к нему регулярное выражение и использовать результат в качестве значения в текстовом поле. Проблема в том, что текущая реализация не потянет URL-адрес реферера в текстовое поле, которое исходило бы от нажатия ссылки на предыдущей странице, но позволяло мне вводить значение вместо этого. Он должен автоматически заполнять текстовое поле реферером и разрешать пользователю искать на нем (или искать вручную вместо этого, если они ранее не нажали ссылку). Консоль выводит Uncaught TypeError: Cannot read property '1' of null для строки $("#imageid").val(encodeID[1]);, потому что она пытается найти второе значение в массиве результирующей строки (что означает, что URL-адрес реферера не вытягивается). Не уверен, что случилось с моей логикойURL-адрес referrer не обрабатывается правильно

Case 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

с дополнительным , если заявление, он не тянуть реферер URL, бу т действительно позволяет пользователю осуществлять поиск вручную

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]); 
    } 

Пользователь должен иметь возможность либо нажать на ссылающейся URL и иметь его предварительно заполнить поле или выполнить поиск вручную.

+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], но вы пытаетесь установить значение, равное encodeID[1], которые никогда бы не существовать, если массив имеет длину 1.

+0

Будет ли лучше, если инструкция if будет просто 'if (encodeID) {...}'? – philtune

+0

Я знаю, что они начинаются с 0. Массив всегда будет проходить после регулярного выражения как «активы/номер, номер». Мне нужно убрать значение, которое будет вторым «числом». – Matt

+0

@Matt Да, но ваша логика сломана. Вы тестируете 'length == 1' ..если ваше регулярное выражение совпадает, у вас будет массив длиной 2, а не длиной 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]); 
} 
Смежные вопросы