jQuery "각()" 함수가 동기화됩니까?
다음을 검증하기 위해 이 시나리오를 고려합니다.
function validateForm (validCallback) {
$('#first-name').add($('#last-name')).add($('#address')).each(function () {
// validating fields and adding 'invalid' class to invalid fields.
});
// doing validation this way for almost 50 fields (loop over 50 fields)
if ($('#holder .invalid').length == 0) {
// submitting data here, only when all fields are validated.
}
}
이제, 제 문제는 if 블록이 루프가 끝나기 전에 실행된다는 것입니다.나는 의 시체를 예상했습니다.validateForm
동시에 실행되지만 jQuery가each()
함수가 비동기식으로 실행됩니다.내 말이 맞니?왜 안 되는 거지?
예, jQueryeach
메서드가 동기식입니다.거의 모든 자바스크립트는 동기식입니다.유일한 예외는 AJAX, 타이머(setTimeout
그리고.setInterval
) 및 HTML5 웹 작업자.
코드의 다른 부분에 문제가 있을 수 있습니다.
jQuery
순수하게 자바스크립트 라이브러리입니다.제외하고ajax
,setTimeout
그리고.setInterval
에서 비동기적으로 실행할 수 있는 것은 없습니다.JavaScript
.그렇게each
확실히 동기적으로 실행됩니다.확실히 내부에 약간의 js 오류가 있습니다.each
블록 코드당신은 콘솔에서 오류가 있는지 살펴봐야 합니다.
또는 jQuery 큐를 확인하여 큐의 모든 기능을 실행할 수 있습니다.이렇게 하면 이전 코드 실행이 완료된 경우에만 대기 중인 기능이 실행됩니다.
이 질문을 하는 또 다른 이유는 .each() 함수가 false를 반환할 때 .each()가 단순히 반복을 중지하고 "return false" 정보를 전달하기 위해 추가 변수를 사용해야 한다는 것입니다.
var all_ok=true;
$(selector).each(function(){
if(!validate($(this))){
all_ok=false; //this tells the outside world something went wrong
return false; //this breaks the .each iterations, returning early
}
});
if(!all_ok){
alert('something went wrong');
}
저에게 그것은 비동기식처럼 작동합니다.동기화 기능이 작동하는 경우, 동기화 기능이 작동하는 이유:
var newArray = [];
$.each( oldArray, function (index, value){
if($.inArray(value["field"], field) === -1){
newArray.push(value["field"]);
}
}
);
//do something with newArray here doesn't work, newArray is not full yet
$.when.apply($, newArray).then(function() {
//do something with newArray works!! here is full
});
return false
에.each()
function은 루프만 차단하고 루프 외부의 나머지 코드는 여전히 실행됩니다.그래서 깃발을 꽂습니다..each()
루프하고 루프 외부에서 확인합니다.
같은 문제입니다.그래서 저는 이렇게 고칩니다.
var y = jQuery(this).find(".extra_fields");
for(var j in y)
{
if( typeof y[j] =='object')
{
var check = parseInt(jQuery(y[j]).val());
if(check==0){
jQuery(y[j]).addClass('js_warning');
mes="Bạn vui lòng chọn đầy đủ các thuộc tính cho sản phẩm";
done=false;
eDialog.alert(mes);
return false;
}
}
}
그게 내가 하는 방식입니다.
function getAllEventsIndexFromId(id) {
var a;
$.each(allEvents, function(i, val) {
if (val.id == id) { a=i; }
});
return a;
}
저도 같은 문제가 있었습니다.나의 $.각각은 아약스 호출의 성공 함수 안에 있었습니다. 나는 아약스 호출을 추가함으로써 동기화했습니다.async: false
그리고 그것은 성공하였다.
jQuery.각 메서드는 동기적으로 순환하지만 특정 순서로 항목을 순환한다고 보장할 수는 없습니다.
언급URL : https://stackoverflow.com/questions/7371942/is-jquery-each-function-synchronous
'programing' 카테고리의 다른 글
redux 형식의 Ajax 호출과 같은 비동기 소스를 기반으로 초기 값을 설정하는 방법 (0) | 2023.08.20 |
---|---|
매개 변수 전달 선언이란 무엇입니까? (0) | 2023.08.20 |
라우터 getCurrentNavigation은 항상 null을 반환합니다. (0) | 2023.08.15 |
Swift에서 배열의 마지막 요소를 가져오려면 어떻게 해야 합니까? (0) | 2023.08.15 |
도커 이미지에 대한 빌드 컨텍스트 매우 큼 (0) | 2023.08.15 |