Что не так с этим:
window.open("graph.php?mach_id=" + machineId);
Если (необъяснимая) проблема заключается в том, что вам нужно сохранить значение machineId
в то время, когда обработчик ondblclick
равен , определен , а не использовать его значение в то время, когда обработчик выполнено , вам нужно закрытие:
(function (id) {
rect.node.ondblclick = function() {
window.open("graph.php?mach_id=" + id);
}
})(machineId);
ОБНОВЛЕНИЕ: ОК, основываясь на новом коде, который вы разместили, я вижу, что я был на правильном пути с идеей закрытия выше. Проблема в том, что ваши обработчики событий пытаются использовать индекс i
в какой-то момент в будущем, когда i
будет равно любому значению, которое было у него, когда цикл закончился. Вам нужно что-то вроде этого:
function showUtilization(machineId, rectUtil, txtResult, txtMCName, rectCover) {
for (var index = 0; index < machineId.length; index++) {
(function(i){
$.ajax({
// all of your other code here, where anytime it
// uses i it will be using the parameter of the
// anonymous function rather than the loop counter
// (which I've renamed to "index" to avoid confusion
// with "i")
});
})(index);
}
}
Я изменил цикл для использования счетчика с именем index
, который передается анонимной функции, которая немедленно выполняется. Ваш существующий код, т. Е. Все, что у вас есть внутри вызова $.ajax({ });
, идет внутри этой анонимной функции. Когда ваш успех и обработчики ondblclick будут выполнены в какой-то момент в будущем, они будут использовать i
из своего собственного замыкания, а не индекс цикла.