jQuery click eventre this átadása
Van egy gyakorlati, és elvi kérdésem. Izzaszt a dolog már rég óta.
A jelenlegi problémámon keresztül tenném fel a kérdést.
Van egy javascript funkcióm:Elméletileg működik a dolog. HTML:És az indítás:Ami a gond, hogy ha 2 id-re akarom indítani a funkciót, akkor bizony az utolsó indítás adatait használja meg.
http://jsfiddle.net/4xgf2vsh/5/
Itt látszik is, hogy az alsó sor működik, a felső be van zavarodva, de ha az alsó sor indítását kiszedjük, akkor működik a felső sor.
azaz a this változó felülíródik az előtte lévők esetében is, hogyan hivatkozhatnék a példányosított verzióra?! Vagy hogyan adhatnám át a this változót, hogy azt használja?
■ A jelenlegi problémámon keresztül tenném fel a kérdést.
Van egy javascript funkcióm:
- var mcChoser = function(args) {
- for (arg in args) { this[arg] = args[arg]; }
- this.Start = function() {
- console.log('start', this.ID);
- self = this;
- $jq('#'+ this.ID +' a').click(function(e){ self.Chosed(e); });
- }
- this.Chosed = function(e) {
- console.log( this );
- if( this.multiple == true ) { $jq(e.currentTarget).toggleClass('active'); }
- else {
- var vane = $jq(e.currentTarget).hasClass('active');
- $jq('#'+this.ID+' a.active').removeClass('active');
- if( vane == false ) { $jq(e.currentTarget).addClass('active'); }
- }
- this.setValues();
- }
- this.setValues = function() {
- var List = $jq('#'+ this.ID +' a.active');
- var HTML = '';
- $jq('#'+this.ID + ' [name="'+ this.inputname +'"]').remove();
- if( List.length > 0 ) { for(i=0; i<List.length; i++) { HTML += '<input type="hidden" name="'+ this.inputname +'" value="'+ $jq(List[i]).data('data') +'">'; } }
- $jq('#'+ this.ID).append(HTML);
- }
- this.Start();
- }
- <div data-input="type" id="filetype" class="iconlist">
- <a class="btn-icon" title="Képek" data-data="kep" href="javascript:void(0);" ><i class="fa fa-file-image-o"></i></a>
- <a class="btn-icon" title="Média" data-data="media" href="javascript:void(0);"><i class="fa fa-file-movie-o"></i></a>
- <a class="btn-icon" title="Dokumentum" data-data="documentum" href="javascript:void(0);"><i class="fa fa-file-text-o"></i></a>
- <a class="btn-icon" title="Egyéb" data-data="egyeb" href="javascript:void(0);"><i class="fa fa-file-word-o"></i></a>
- </div>
- filetype = new mcChoser({ID:"filetype"});
http://jsfiddle.net/4xgf2vsh/5/
Itt látszik is, hogy az alsó sor működik, a felső be van zavarodva, de ha az alsó sor indítását kiszedjük, akkor működik a felső sor.
azaz a this változó felülíródik az előtte lévők esetében is, hogyan hivatkozhatnék a példányosított verzióra?! Vagy hogyan adhatnám át a this változót, hogy azt használja?
bind / $.proxy
Function#bind
-ot vagy$.proxy
-t használnék:this
értékét.Igazából az igazi probléma hogy a
self
egy globális változó, és az utolsó értéke nem az, mint amire számítasz.var
self
változót ahelyett, hogy deklarálnádvar
használatával a függvényen belül.Szégyenlem
Köszönöm nektek! :(
Szerintem a hiba nem a var
var
hiánya volt!A hiba az, hogy akartál
self
változót használni!Így kellett volna (minimum):
Start
függvénynek sok hasznát és értelmét nem látom. Főleg nem a construktorban létrehozva (ez igaz a többire is).Remélem azért ezzel a kóddal nem vagy elégedett?!
Mert ez nagyon-nagyon-nagyon nincs rendben!
Ez egy "állatorvosi ló"!