이것은 JQuery에 있으며 JQuery-UI 버전의 자동 완성을 사용합니다.JQuery 자동 완성 - ID를 사용하지 않고 근처 DOM 요소를 기반으로 목록을 제어하려면 어떻게해야합니까?
저는 약간의 단점이 있습니다. 저는 무한정 복제 가능해야하는 양식 안에서 작업하고 있습니다. 따라서 ID 태그를 고유 한 식별에 사용할 수 없으며, 맨 위에서 아래로 검색하여 내가 작업중인 DOM 요소처럼 보이는 것을 찾을 수 없습니다 - 상대 함수 (.closest, .find 등)를 사용해야합니다. 이 양식 안에는 국가 필드, 상태 필드 및 위치 필드가있는 설정이 있으며 위치 필드는 국가 및 상태 필드의 현재 값을 전달하는 링크에서 제공되는 자동 완성으로되어 있습니다. 링크에서 서버 측 필터링을 수행합니다. 소스 함수의 $ (이) locNode하지 않기 때문에 작동하지 않는 것을 제외하고
function locPrep(locNode) {
$locNode.autocomplete({
source: function (request, response) {
$locDiv = $(this).closest("div.locWrapper");
$stateNode = $locDiv.find("input.state");
$countryNode = $locDiv.find("input.country");
$.post("/FormHost/AutocompleteLocList",
{state:$stateNode.val(), country:$countryNode.val(), term:request.term },
function (data) {
response(data);
}
);
}
});
}
..., 나는 할 수 없습니다 : 나는 이런 식으로 뭔가를 갈 같은 을 거라고 locPrep가 반복적으로 호출되기 때문에 바깥 쪽을 선언하고 내부에서 사용하기 만하면 양식의 자동 완성마다 한 번씩 호출됩니다. 이것을 시도하면 Jquery가 모든 것을 글로벌하게한다는 사실은 양식의 모든 자동 완성이 국가 및 국가 필드를 마지막으로 참조하도록 만듭니다. 나는 범위 지정 문제를 해결하기 위해 javascript vars를 사용하여 시도했지만 이상하게 파열되었습니다. 누구든지 도와 줄 수 있습니까?
편집 : 드미트리 Naumov의 종류의 지원 덕분에, 나는 (나는 아직도 완전히 확실하지 않다하지만 작동하는 이유는 않았다 내가하려고하는 일의 일부를 주어진 기능 솔루션을 함께 망치 할 수 있었다 아니). 나중에 다른 사람을 도울 수 있기를 희망하는 코드를 포함시키고있다. (필자는 다른 사람들의 대답에 대해 많은 질문을 던졌습니다.)
먼저 locPrep (foo);에서 함수를 호출 한 모든 인스턴스를 살펴보고 변경했습니다. "새로운 locPrep (foo);" 또한 locNode 대신 locDiv를 사용하도록 변경했습니다. 그런 다음 코드를 다음과 같이 변경했습니다 (다소 단순화 된 버전 임에도 불구하고).
function locPrep(locDiv) {
$locNode = $(locDiv).find("input.locationAutofill")
$locNode.autocomplete({
source: function (request, response) {
var stateVar = $(locDiv).find("input.state").val();
var countryVar = $(locDiv).find("input.country").val();
$.post("/FormHost/AutocompleteLocList",
{state:stateVar, country:countryVar, term:request.term },
function (data) {
response(data);
}
);
}
});
}
나는 전적의 비트가 필요했지만, 그룹으로 그들이 문제를 해결하기 위해 꽉 충분한 범위 지정을 사용하여 주변의 코드를 인력으로 움직 확실하지 않다.
의 각 인스턴스에 고유 있는지 확인합니다,하지만 난에 다른 매개 변수를 추가하는 방법을 어디서나 볼 수없는 것 함수 (위의 소스 함수와 같은)는 다른 함수에 매개 변수로 전달됩니다. 이 경우 함수 인터페이스가 꽤 많이 설정되었다는 것을 문서를 읽는 것 같았습니다. 내가 여기서 누락 된 기술이 있다면, 그것에 대해 듣게되어 기쁩니다. –
@Ben Barden : 내 업데이트를 참조하십시오. locPrep에 컨테이너 링크를 전달하는 방법을 보여줍니다. locPrep은 각 링크를 locNode와 같은 방식으로 처리합니다. –
좋아요 ... 나는 당신이 말하는 것을 얻기 위해 내가 필요한 것의 1/3 정도를 이해하고 있다고 생각합니다. 그 자체로 외부 함수를 새로 고치려고했는데, 이것이 의미하는 바입니다. Jquery 객체의 고유 한 전역 범위 지정을 막는 데 아무런 영향을주지 않았습니다. 나는 당신이 말했던 것을 기반으로 조금 봤 거든 객체 지향 자바 스크립트에 대한 몇 가지 물건을 건너 온 클래스로 기능. 함수를 미리 정의하고 전달하는 것이 효과가 있을지는 모르지만 그게 의미가 없다면 그 함수가 작동하지 않는다는 것을 알기 위해 많은 시간을 낭비하고 싶지는 않습니다. . –