нужно просто вынести
op -=0.05;
выше проверки на ноль
еще хорошо бы объявлять переменные в функции с помощью var, иначе они станут глобальными, а это плохо
вместо 'hide(\''+ob+'\', '+op+')' лучше нормально вызывать функцию
и вместо alert() использовать console.log(), - не будет прерываться выполнение программы
будет что-то вроде
function hide(ob, x) {
var element = document.getElementById(ob),
i = 0,
op = parseFloat(x);
op -= 0.05;
if (op > i) {
element.style.opacity = op;
setTimeout(function () {
hide(ob, op);
}, 10);
} else {
element.style.opacity = 0;
}
console.log(op);
}
да по хорошему лучше и document.getElementById(ob) один раз делать, а не каждый раз