ROVERRIDID JQUERY .VAL()函数有效,但Getter被称为多次

问题描述 投票:0回答:1
i'm覆盖jQuery的

.val()

函数,因此当我设置
select
元素的值时,我可以自动触发更改事件。
GETTER和SETETER代码可以正常工作,但是执行

$('select').val()

执行操作台两次。我不相信应该发生,所以有人知道怎么了吗? there是一个jsfiddle:

https://jsfiddle.net/41hxsam9/1/
Getter

如果我们记录了val返回的对象,我们会发现它被调用一次,并且一次为选项,这很可能就是jQuery的工作方式:

const originalVal = $.fn.val;

$.fn.extend( {
    val: function() {
        if ( arguments.length > 0 ) {
            if ( $( this ).hasClass( 'myselect' ) ) {
                console.log( 'Setter' );
                const result = originalVal.apply( this, arguments );
                $( this ).trigger( 'change' );
                return result;
            }
        }
        console.log( 'Getter' );
        return originalVal.apply( this, arguments );
    }
} );
jquery
1个回答
0
投票

else {
  // Getter call.
  console.log('Getter',this["0"]);
  return originalVal.apply(this, arguments);
}

$(() => { const originalVal = $.fn.val; $.fn.extend({ val: function() { if (arguments.length > 0) { // This is a setter call. if ($(this).hasClass('myselect')) { console.log('Setter'); const result = originalVal.apply(this, arguments); $(this).trigger('change'); return result; } else { // Normal setter for elements without the class. return originalVal.apply(this, arguments); } } else { // Getter call. console.log('Getter',this["0"]); return originalVal.apply(this, arguments); } } }); $('#button-1').click((e) => { $('select').val('1'); }); $('#button-2').click((e) => { console.log($('select').val()); }); });


    
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.