获取变量值到jQuery UI调用

问题描述:

我正在使用HTML/CSS/JavaScript/jQuery为Sketchup插件创建UI调色板。调色板中有很多实例需要一个带有关联滑块的输入框,所以我决定使用JavaScript创建一个“类”,这样我就可以将它们打印出来。在输入框/滑块连击之一的HTML看起来像这样:获取变量值到jQuery UI调用

<span>H:&nbsp;<input type="text" class="InputBox" id="reg_panel_spacing_h"></span> 
<div class="SliderSpan" id="reg_panel_spacing_h_slider"></div><br/> 

JavaScript的的相关部分看起来是这样的:

$(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,并且在那里使用时按预期执行。

基本上,似乎发生的事情是,包含“有问题的行”的函数在创建时与所有滑块的滑动事件关联,并且它只使用最近创建的输入的jq_id框。如果更改“有问题的线路”,如下所示:

$(("#" + self.element_id)).val(ui.value); 

问题已修复。所以,我有一个解决方法。我只是希望有人能够向我解释到底发生了什么。

非常感谢!

乔希

尝试使局部变量,像这样:

var jq_id = "#" + this.element_id; 

我怀疑,不使其局部得到它全球范围内解释了“怪异”的行为。

+0

的确如此。我有点尴尬,我没有想到这一点。无论如何,谢谢! – jkjenner 2011-01-19 17:22:59