BOLD은 업데이트를 나타냅니다.은 배열을 반복하는 러너를 구현합니다.
나는 배열이 steps
이며, 그 내용은 액션과 요소가 연관된 객체입니다. 이와 같이 :
steps = [{action: 'click', element: <jQuery element>},
{action: 'click', element: <jQuery element>}, ., ., N]
주자를 구현하고 싶습니다. 그 작업은 배열의 각 요소를 실행하고 요소에 대해 특정 작업을 수행하는 것입니다. 각 단계는 연속적으로 수행되어야합니다. 그래서 예를 들어, 당신이있는 경우 :
steps = [{action: 'click', element: <jQuery element representing a button>},
{action: 'click', element: <jQuery element representing an anchor tag>}]
, run(steps, timeout)
실행, 각 단계를 실행하는 것입니다. step [0] .action은 step [0] .element에서 수행됩니다. step [0]이 단계 [1]에서 상호 작용할 dom 요소 (AJAX을 사용하여)를 만들 수 있으므로 주자는 특정 기간 (따라서 시간 초과)을 기다려야 만 dom을 폴링해야합니다 단계 [1]. 요소의 존재에 대해. 위의 예에서 steps
가 JQuery와 객체의 단지 배열입니다
var run = function() {
$.each(steps, function(i, v) {
var interval = 25,
start = 0,
timeout = 3000;
var i = setInterval(function(timeout) {
start = start + interval;
console.log(start);
if ($(v).is(':visible')) {
v.click();
console.log('clicked', v);
clearInterval(i);
}
}, interval);
});
};
참고 : 여기에
내가 지금까지 무엇을에서 거친 걸릴 수 있습니다. 아직 원하는 형식이 아닙니다 :steps = [{action: 'click', element: <jQuery element>},
{action: 'click', element: <jQuery element>}, ., ., N]
따라야 할 '패턴'은 무엇입니까? 이를 처리하기 위해 지연된 객체를 사용해야합니까? 그것은 setTimeout, setInterval? 감사!
최종 구현
var run = function(steps, interval, timeout) {
var timer,
time = 0,
i = 0;
runSingle(steps[0]);
function abort() {
console.log("Run aborted");
}
function runSingle(step) {
timer = setInterval(function() {
time += interval;
if ($(step.element).is(':visible') === true) {
clearInterval(timer);
time = 0;
$(step.element).trigger(step.action);
(i < (steps.length - 1)) && runSingle(steps[++i]);
} else if (time >= timeout) {
clearInterval(timer);
abort();
}
}, interval);
console.log("Performed: ", step.action, "on", step.element)
if (i === (steps.length - 1)) console.log("Run successful");
}
}
합니까''JQuery와 선택기로 사용할 수있는 jQuery를 객체 또는 단지 CSS 선택기를 나타냅니다? 이미 jQuery 객체 인 경우 새 요소가 DOM에 추가되면 업데이트되지 않습니다. –
Thanks. 현재 그것은 셀렉터를 사용하기 위해 업데이트해야하는 jquery 객체입니다. –
선택기가 클래스 선택기이고 해당 클래스의 페이지에 다른 요소가 이미있는 경우 이전 함수가 이미 해당 작업을 완료했는지 어떻게 알 수 있습니까? –