1

我有一个<select>盒子:

<select id="myselect">
   <option value="1">one</option>
   <option value="2">two</option>
   <option value="3">three</option>
</select>

我需要修改它的change事件,所以val_after_change无论事件是如何触发的,它都会有一个属性。

// THIS FUNCTION CANNOT BE MODIFIED
$('#myselect').change(function(e){
    // this should alert select value after change
    alert(e.val); 
});

我知道,在这里我可以alert $(this).val(),但我的真实示例更复杂且需要e.val。我知道这适用于select2,但我无法理解他们的源代码。

如何修改事件?我需要做一个包装器还是什么?任何帮助都将不胜感激。

编辑:

我正在一个库上制作一个包装器,它selects使用e.val属性,所以我不能修改change事件本身。触发事件时,我需要该属性已经存在。像这样,但将其设为默认行为:

e = jQuery.Event('change', {val: 2});
$('#myselect').trigger(e);

提琴手

4

1 回答 1

0

我不知道我明白了,这是一个镜头:

(function ($){
   // keep a copy of the original "select2" function
   var lib_select2 = $.fn.select2;

   // wrap it into a call which 
   // first adds a listener to add the value as a property of the event,
   // then adds whatever extra stuff the library adds
   $.fn.select2 = function(){
        this.change(function(e){
            e.val = this.value;
        });

        lib_select2.apply(this, arguments);
   }
})(jQuery)
于 2013-03-18T13:36:44.433 回答