jQuery + JavaScript + Rails 4
prefix = "onward_"
json_data = {"367278":
{"bus_schedules":
{ "id": 367278,
"origin_id": 134,
"destination_id": 506
},
"drop_points": null,
"board_points": null,
"operator_name": "ABC"
}
}
json_data1 = JSON.stringify(json_data);
html = '<a href="#" id="'+prefix+'active_travel_filter_'+
operator_ids[i]
+'"onclick="removeTravelFilter('
+'\''+prefix+'\''+',\'travels\''+',\''
+json_data1+'\',\''+json_data1+'\')"
value="'+operator_ids[i]+'">'
+getOperatorName[operator_ids[i]]+'</a>'
console.log(html);
$("#active_fiters_blk").append(html);
Вывод //console.log
<a href="#" id="onward_active_travel_filter_90" onclick="removeTravelFilter('onward_','travels','{"367278":{"bus_schedules":{"id":367278,"origin_id":134,"destination_id":506},"drop_points":null,"board_points":null,"operator_name":"ABC"}}','{"367278":{"bus_schedules":{"id":367278,"origin_id":134,"destination_id":506},"drop_points":null,"board_points":null,"operator_name":"ABC"}}')" value="90">ABC</a>
Но при добавлении в div
я получаю этот формат, но он должен быть выше формата.
<a value="33" group)"}}')"="" group)"}}','{"367278":{"bus_schedules":{"id":367278,"origin_id":134,"destination_id":506},"drop_points":null,"board_points":null,"operator_name":"sre="" booking(ananth="" 367278":{"bus_schedules":{"id":367278,"origin_id":134,"destination_id":506},"drop_points":null,"board_points":null,"operator_name":"sre="" onclick="removeTravelFilter('onward_','travels','{" id="onward_active_travel_filter_33" href="#">ABC</a>
Это должен быть встроенный скрипт только потому, что я хочу, чтобы каждый отдельный событие onclick
.
HTML, который вы пытаетесь вставить, - это строка:
<a href="#" id="onward_active_travel_filter_0" onclick="removeTravelFilter('onward_','travels','{"367278":{"bus_schedules":{"id":367278,"origin_id":134,"destination_id":506},"drop_points":null,"board_points":null,"operator_name":"SRE Booking(Ananth Group)"}}','{"367278":{"bus_schedules":{"id":367278,"origin_id":134,"destination_id":506},"drop_points":null,"board_points":null,"operator_name":"SRE Booking(Ananth Group)"}}')" value="0">0</a>
Когда вы поместите это в DOM, ваш браузер будет смущен параметрами части onclick
: onclick="removeTravelFilter('onward_','travels','{"
Последняя цитата ("
) будет интерпретироваться как конец параметра onclick
.
Если вы переключаете кавычки в свой JavaScript следующим образом:
html = "<a href='#' id='"+prefix+"active_travel_filter_"+operator_ids[i]+"' onclick='removeTravelFilter("+"\""+prefix+"\""+",\"travels\""+","+json_data1+","+json_data1+")' value='"+operator_ids[i]+"'>"+getOperatorName[operator_ids[i]]+"</a>"
Тогда вы должны быть в порядке:
<a href='#' id='onward_active_travel_filter_0' onclick='removeTravelFilter("onward_","travels",{"367278":{"bus_schedules":{"id":367278,"origin_id":134,"destination_id":506},"drop_points":null,"board_points":null,"operator_name":"SRE Booking(Ananth Group)"}},{"367278":{"bus_schedules":{"id":367278,"origin_id":134,"destination_id":506},"drop_points":null,"board_points":null,"operator_name":"SRE Booking(Ananth Group)"}})' value='0'>0</a>
Я не говорю, что это лучший способ передать эти параметры вашей функции, но он работает.
Я бы сохранил словарь, связывающий имена идентификаторов привязки с соответствующими json-данными.
window.dataCache = {
"onward_active_travel_filter_90": {...},
...
}
Как только элемент будет нажат, я выберу требуемый объект json.
$('a').click(function(){
var id = this.id;
var jsd = dataCache[id];
//pass to target function
foo(jsd);
});
Теперь, если якорь добавлен немного поздно в страницу dom, мне придется позаботиться о том, чтобы привязать обработчики событий соответствующим образом.
В jquery мы можем просто работать с обработчиком .on()
.
Объяснение:
Ну, мы обычно делаем что-то вроде $('element').click(function(){...});
, Обычно это выполняется в событии jquery dom ready:
$(function(){
$('element').click(function(){...});
});
Расширение кода в событии dom dom выполняется после того, как DOM готов к использованию jquery. Следовательно, событие click будет привязано к любому element
который существует в DOM в этот момент времени.
Любое последующее добавление element
в веб-страницу обработчик события клика не привязается к нему.
Но нам нужна такая функциональность!
Следовательно, мы должны вручную позаботиться об этом. Смысл создания element
связать обработчик события соответствующим образом, а затем добавить его в DOM.
Альтернативой этому является метод jQuery .on()
. Однако он функционирует иначе, чем описано выше. Он прослушивает событие click, которое "пузырится" на целевом контейнере.
Пожалуйста, прочитайте документы .on()
чтобы получить лучшую идею.