저는 HTML/CSS/JavaScript/jQuery를 사용하여 Sketchup 플러그인 용 UI 팔레트를 만듭니다. 팔레트에는 연결된 슬라이더가있는 입력 상자가 있어야하는 인스턴스가 많기 때문에 JavaScript를 사용하여 "클래스"를 만들기로 결정 했으므로이를 제거 할 수 있습니다. 입력 상자/슬라이더 콤보 중 하나에 대한 HTML은 다음과 같습니다jQuery UI 호출에 변수 값 가져 오기
<span>H: <input type="text" class="InputBox" id="reg_panel_spacing_h"></span>
<div class="SliderSpan" id="reg_panel_spacing_h_slider"></div><br/>
자바 스크립트의 관련 부분은 다음과 같습니다
$(document).ready(function() {
function InputBoxJS (id, mi, ma, numtype, slider) {
this.current_val = mi;
this.element_id = id;
this.minimum = mi;
this.maximum = ma;
var self = this;
// string for selecting element using jquery
jq_id = "#" + this.element_id;
// slider code (if input box has associated slider)
if(slider = true) {
slider_jq_id = jq_id + "_slider" // id for selecting slider; assumes it's input id + "_slider"
$(slider_jq_id).slider({
min: mi,
max: ma,
value: self.current_val,
slide: function(event,ui) {
$(jq_id).val(ui.value); // PROBLEMATIC LINE
call_ruby("manipulate_data", self.element_id);
}
});
} // if slider = true
}
// create script objects for two input boxes
var reg_panel_spacing_h = new InputBoxJS("reg_panel_spacing_h", 500, 50000, 0, true);
var reg_panel_spacing_v = new InputBoxJS("reg_panel_spacing_v", 500, 50000, 0, true);
});
제가하는 데 문제는 내가 만들 때이다 이 클래스를 사용하는 두 개의 입력 상자 (위 코드에 표시된대로)는 두 슬라이더가 두 번째 입력 상자와 연결됩니다. 특히 위의 코드에서 문제가있는 것으로 표시된 jq_id 변수는 두 입력 상자에서 모두 "reg_panel_spacing_v"로 설정됩니다. 기괴한 것은 jq_id가 slider_jq_id를 설정하기 위해 "problematic line"보다 몇 줄 위에 사용되고, 거기에서 사용될 때 예상대로 수행된다는 것입니다.
기본적으로 "문제가있는 줄"이 포함 된 함수는 모든 슬라이더의 슬라이드 이벤트가 생성 될 때 해당 슬라이더 이벤트와 관련이 있으며 가장 최근에 만든 입력의 jq_id 만 사용합니다 상자. 다음과 같이 "problematic line"을 변경하는 경우 :
$(("#" + self.element_id)).val(ui.value);
문제가 해결되었습니다. 그래서 해결 방법이 있습니다. 나는 누군가가 나에게 정확히 무슨 일이 일어나는지를 설명 할 수 있기를 바랄 뿐이다.
감사합니다. 이 같은 변수 지역을
조쉬
실제로 그렇게합니다. 나는 그 생각을하지 못했지만 가볍게 당황 스럽다. 어쨌든, 고마워! – jkjenner
@jkj 건배, 우리가 여기있는 이유입니다. :) –