Единственная очевидная разница в двух частях кода - это перемещение var search=el.clicked_field
из контекста $.grep
перед всем телом кода.На данный момент el
еще не существует.Так что, если у вас нет другого фрагмента кода, который покрывает этот недостаток в вашем посте, это ваша проблема.
РЕДАКТИРОВАТЬ:
Небольшой совет JavaScript.Переменные являются глобальными в своей области, поэтому возьмем, например, следующее:
$('#some-element').click(function() {
var someElement = $(this);
$.getJSON('url', function(data, jqXHR){
console.log(someElement); // exists!
});
});
РЕДАКТИРОВАТЬ: (снова)
Хорошо, поэтому у вас есть некоторые фундаментальные проблемы в вашемлогика и синтаксис.Рассматривать этот аспект в комментариях становится немного утомительно, поэтому я просто проиллюстрирую:
$('#some-element').click(function() {
var someElement = $(this).attr('href');
// someElement == 'http://google.com'
$.getJSON('data/all.json', function(data) {
location = $.grep(data, function(el, i) {
clicked = someElement.toLowerCase().slice(1);
// clicked == 'ttp://google.com' # Why?
link = 'el' + '.' + clicked;
// link == 'el.ttp://google.com' # Why?
console.log(link); // This bit was for illustrative purposes, you should remove it from your code now.
return link === "Y";
// "el.ttp://google.com" != "Y" # Obviously, and never will
});
});
data
- список объектов JavaScript.Передача его в $.grep
вызовет итерацию по этим объектам.На каждой итерации текущий объект будет храниться в el
, а индекс этого объекта в массиве data
будет храниться в i
.Возьмем этот бит JSON в качестве примера:
[ { "foo": 1, "bar": 2 } ]
Если бы это был возвращенный JSON, тогда el
будет иметь атрибуты foo
и bar
, которые вы затем сможете использовать для доступа кзначения каждого, например:
el.foo == 1 // True
el.bar == 2 // True
Возможно, если вы действительно разместите свой ответ JSON, я мог бы помочь вам в дальнейшем.(Обновите свой вопрос, не оставьте его как комментарий)