2016-04-04 19 views
1

değil dosya, buttons.js.Bir kimliğine sahip bir HTML öğesini sahip bir işlev

buttons.js: buttons.js içinde

function ButtonsPanel() { 

    var that = this; 
    this.buttonsEl = document.createElement('div'); 

    var baseBtn = d3.select(this.buttonsEl); 

    var containerBtns = baseFilter.append('div') 
     .classed({'button-grp': true}) 
     .attr({id:'containerButtons'}); 


    var tmp = containerBtns.append('div') 
     .classed({'time-container': true}); 

    tmp.append('input') 
     .attr({type: 'number', min: '0', max: '24', step:'1', value:'00', id:'time-hour', 'disabled': 'disabled'}); 

    tmp.append('span') 
     .text(':'); 

    tmp.append('input') 
     .attr({type: 'number', min: '0', max: '60', step:'1', value:'00', id:'time-minutes', 'disabled': 'disabled'}); 

    this.timeInputs = tmp; 

    var timeHours = this.timeInputs[0][0].children[0]; 
    // returns <input type="number" min="0" max="24" step="1" value="00" id="time-hour" disabled="disabled"> 
    var timeMins = this.timeInputs[0][0].children[2]; 
    // returns <input type="number" min="0" max="60" step="1" value="00" id="time-minutes" disabled="disabled"> 

} 

i yük toggleVisability denir bir yöntemi vardır: i olsun, yukarıdaki ile

ButtonsPanel.prototype.toggleVisability = function() { 

    var that = this; 

    this.visabilityApply('#containerButtons', function(num) { 
     if (!num) { 
      alert(that.timeInputs[0][0].children[0]); 
      that.timeInputs[0][0].children[0].attr({'disabled': true}); 
     } 
     else { 
      alert(that.timeInputs[0][0].children[0]); 
      that.timeInputs[0][0].children[0].attr({'disabled': null}); 
     } 
    }); 
}; 

hatası:

TypeError: that.timeInputs[0][0].children[0].attr is not a function 

Yine de, eğer uygularsam:

that.timeInputs.attr({'disabled': true}); 

Yukarıdakiler iyi çalışıyor, ancak giriş alanlarındaki engellenmiş öznitelikleri değiştirmek istiyorum. JQuery kullanıyorum.

+1

jQuery'yi kullanarak, bu kod çok daha iyi ve anlaşılabilir görünüyordu. JQuery'yi de etiketlediğini görebiliyorum. Onu kullanmak ister misin? – Tushar

+0

Lütfen kod tabanınız için keman oluşturunuz, anlamak güzel olacak :-) –

+0

@TusharGupta - Dosyada çok fazla olmasa da projede jquery kullanıyorum. –

cevap

4

attr(), jQuery işlevidir ve bu nedenle, jquery context içeriğinde çağrılması gerekir. Senin durumunda

:

that.timeInputs[0][0].children[0] 

(that.timeInputs hala jQuery bağlamını başvuran iken) bir attr() işlevi, böylece hatayı ortaya çıkarmak değil bir yerli DOM öğesi döndürür.

yerine bu deneyin:

$(that.timeInputs[0][0].children[0]).attr({'disabled': true}); 
1

yine JavaScript ile gitmek isterseniz, brakets {} Kaldır

that.timeInputs[0][0].children[0].setAttribute("disabled", "true"); 
1

gibi setAttribute() kullanabilirsiniz whrap jquery değişken

$(that.timeInputs[0][0].children[0]).attr('disabled': true) 
İlgili konular