2010-08-21 53 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