2010-08-21 23 views
1

我用下面的結構來闡述我的對象/類在JavaScript:的jQuery/JavaScript的添加事件觸發OOP

SelectUser = function(instanceID) { 
    this._instanceID = instanceID; 

    // Initialize 
    this.initialize(); 
} 

SelectUser.prototype = { 
    initialize: function() { 
     ... 
    }, 

    update(userID) { 
     $('#hidden-field-' + this._instanceID).val(userID); 
    } 
} 

這讓我說:在SelectUser

$selectUser = new SelectUser(1); 

外對象我需要執行一些不同的代碼(每個實例SelectUser),每當隱藏字段的值發生變化時。我的第一個想法是嘗試:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $selectUser = new SelectUser(1); 
     $selectUser2 = new SelectUser(2); 

     $('#hidden-field-1').change(function() { 
      alert('Something'); 
     }); 

     $('#hidden-field-2').change(function() { 
      alert('Something else'); 
     }); 
    }); 
</script> 

但是,警報沒有觸發。我的下一個想法是在SelectUser對象/類中的我的更新函數/方法中添加一個事件觸發器。然後,我可以爲每個實例訂閱此事件並執行一些不同的代碼。

我該怎麼做?我一直在使用JavaScript多年,但我對JavaScript中的jQuery和OOP相當陌生。

回答

3

.val()不會觸發change事件,因爲您正在以編程方式更改該事件,但是您可以自己觸發事件,以便爲其運行所有處理程序。要做到這一點,使用.change(),像這樣:

$('#hidden-field-' + this._instanceID).val(userID).change(); 

要觸發事件,你有幾種選擇,.trigger('change')觸發它冒泡(.change()不帶任何參數僅僅是一個快捷方式這一點)。再有就是還.triggerHandler('change')如果你只是想要觸發事件處理程序在元素上直接但又不希望它的泡沫或做原生行動....但99%的時間你.trigger('change').change()快捷方式後是。

+0

乾杯幹得好吃! – nfplee 2010-08-22 10:03:22

相關問題