나는이 방법을 사용하는 사람보다 훨씬 쉽게 찾을 수있는 질문이 있지만, 아쉽게도 커스텀 jQuery 플러그인에 대한 많은 경험이 없습니다.Multisuggest 플러그인에서 jQuery 클로저가 작동하지 않는 매개 변수를 전달하는 중
내 작업장의 이전 개발자가 제대로 작동하지 않는 왼쪽에있는 많은 플러그인을 남겼습니다. 대부분 해결할 수 있었지만이 문제는 나를 괴롭혔습니다. 동안.
그것이 jQuery를에 기록하고, 그것을 (* 예 setValue의 박스의 값을 설정하기 위해 내부적으로 사용하는 기능 세트가 맞춤 여러 제안 플러그인 (호출 multisuggest) 또는 룩업
: 검색) * 그가 (이 exteranl 스크립트는 특히 사용자 입력을 통해 multisuggest에 새로 생성 된 제안을 가져 외부 스크립트에서 이러한 플러그인 함수를 호출하려고 것 같습니다과 같은) 값을 설정를 업데이트
this.$input.multisuggest('setValue', data.address.id, address);
두 번째 및 세 번째 매개 변수가 함수에 전달되지 않는 것 (setValue는 수신하지 않음)을 제외하고 함수를 호출하는 것처럼 보입니다. 전달할 수있는 방법을 이해하지 못합니다. 이들. 그것은 콘솔에 로그인 할 때 정의되지 않는다고 말합니다.
MultiSuggest.prototype = $.extend(MultiSuggest, _superproto, {
constructor : MultiSuggest,
select: function() { // When selecting an address from the suggestions
var active, display, val;
active = this.$menu.find('.active');
display = active.attr('data-display');
val = active.attr('data-value');
this.setValue(display, val, false); // This works, however when I do it as shown in the above example from an external script, it doesn't. This is because it doesn't receive the arguments.
},
setValue : function(display, value, newAddress) { // Setting the textbox value
console.log(display); // This returns undefined
console.log(value); // This returns undefined
if (display && display !== "" &&
value && value !== "") {
this.$element.val(this.updater(display)).change();
this.$hiddenInput.val(value);
this.$element.addClass("msuggest-selected");
}
if(newAddress === false){
return this.hide();
}
},
});
가 왜이 기능을들을 않습니다 기능은 (난 단지 내가 사용 하나 실제로 작동 선택이라고 multisuggest에서 내부 기능을 포함 한 )과 같이 명시되어 있습니다 ,하지만 전달 된 값이 아닌? 이러한 인수를 정의하기 위해 어딘가에 추가 코드 줄을 포함해야합니까?
jQuery 경험이있는 사람이라면 누구나 도움이 될 것입니다. 현재 프로젝트에서 병목 현상이 발생합니다. 시간 내 줘서 고마워!
편집 : 외부 스크립트에서 플러그인의 내부 기능으로 인수가 전달되는 방법에 대한 코드를 놓쳤습니다. 다음은 외부 호출이 처리되는 방법에 대한 플러그인 정의입니다. 누구나이 문제를 볼 수 있습니까?
$.fn.multisuggest = function(option) {
return this.each(function() {
var $this = $(this), data = $this.data('multisuggest'), options = typeof option === 'object' && option;
if (!data) {
$this.data('multisuggest', (data = new MultiSuggest(this, options)));
} else if (typeof(option) === 'string') {
var method = data[option];
var parameters = Array.prototype.slice.call(arguments, 1);
method.apply(this, parameters);
}
});
};
상속 모델이 약간 이상하게 보일 수도 있지만 로그 문이 전혀 작동하지 않을 수도 있습니다. 'set()'이외의 다른 곳에서'setValue()'가 호출 되었습니까? 모든 통화를 추적하여 각 통화가 유효한 '표시'와 '가치'를 통과하는지 확인하십시오. –
나는 setValue를 실제로 호출 한 곳을 명확히하지 않았으므로이 질문을 수정했다. 첫 번째 스 니펫 코드는'this. $ input.multisuggest ('setValue', data.address.id, address);가 실제로 외부 스크립트 **에서 호출되고 있음을 보여줍니다. 즉, 새 주소를 만들고 제안 상자에 가져 오는 스크립트입니다. 나는 여러 입력 상자에서 무언가를 선택할 때 나는, 디스플레이 및 값을 기록 는 , 쉽게 변수를 전달하지만, 그것은 범위의 안에 있기 때문에 분명히이다. 외부 스크립트에서 호출 할 때 함수가 작동하지 않는다고 말한 것과 같습니다. – SixteenStudio
(즉각적인) 문제는 외부 스크립트에있는 것처럼 보입니다. 'this. $ input.multisuggest (...);'가 호출되면'data'와'address'가 아직 존재하지 않는 것처럼 보입니다. 나는 비동기 문제를 의심 할 것이다. 예를 들어 콜백이나'.done() '핸들러 안에서 그 라인을 옮겨야 할 필요가있다. –