2013-06-19 105 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

不,現在是第一個讓其他人無法接受的地方。我需要一個指定的位置爲每個輸入:( –