2013-06-19 60 views
0

我有这4个下拉菜单,我将用它来在我的网站上设置高级搜索。我不是一个JavaScript程序员,所以我需要一个帮助来伪装代码。我为我的4字段分割了4次代码,但是我有一个错误,一个变量覆盖了之前设置的其他3个。有一个简单的简单方法可以做到我需要的一半代码。这是我的环境http://jsfiddle.net/4K7L7/3/Javascript dropdown issue

function DropDown(el) { 
     this.dd = el; 
     this.placeholder = this.dd.children('span'); 
     this.opts = this.dd.find('ul.dropdown > li'); 
     this.val = ''; 
     this.index = -1; 
     this.initEvents(); 
    } 
DropDown.prototype = { 
    initEvents : function() { 
     var obj = this; 

     obj.dd.on('click', function(event){ 
      $(this).toggleClass('active'); 
      return false; 
     }); 

     obj.opts.on('click',function(){ 
      var opt = $(this); 
      obj.val = opt.text(); 
      obj.index = opt.index(); 
      obj.placeholder.text('Tipo: ' + obj.val); 
     }); 
    }, 
    getValue : function() { 
     return this.val; 
    }, 
    getIndex : function() { 
     return this.index; 
    } 
} 

$(function() { 

    var dd = new DropDown($('#dd')); 

    $(document).click(function() { 
     // all dropdowns 
     $('.wrapper-dropdown-1').removeClass('active'); 
    }); 

}); 

回答

0

您的代码似乎没问题。你只需要为每个元素创建一个实例,就像这样:

var dd = new DropDown($('#dd')), 
    cc = new DropDown($('#cc')), 
    bb = new DropDown($('#bb')), 
    aa = new DropDown($('#aa')); 

或者添加一个“DD”类所有的元素,然后你可以有:

$('.dd').each(function(){ 
    new DropDown($(this)); 
}); 

无需复制功能......

+0

我需要,我认为设置变量,因为,在本节在这里: obj.opts.on(“点击”,函数(){VAR 选择= $(本); obj.val = opt.text(); obj.index = opt.index(); obj.placeholder.text('Tipo:'+ obj.val); }); 我必须为每个下拉列表指定一个不同的占位符。 现在最后一个函数(最后一个writed)是先前的占位符。然后,每次我选择一个下拉式占位符集是最后一个。你可以在jsfiddle中看到更好的问题。你可以建议我的变数方式? –

+0

是的,这就是我在说的:http://jsfiddle.net/VxzeD/ –

+0

不,现在是第一个让其他人无法接受的地方。我需要一个指定的位置为每个输入:( –