亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jQuery 對象方法被多次調用

jQuery 對象方法被多次調用

慕姐8265434 2022-12-29 15:10:39
我正在嘗試編寫一個 jQuery 方法來監視給定表單元素內輸入的變化:(function($) {    $.fn.filter = function(options) {        console.log('Outside');        var self = this;        var settings = $.extend({}, options);                this.on('change', ':input', function(e) {            console.log('Inside');           $(self).serialize(); // Here is the problem        });        return this;    }})(jQuery);$('#filter-form').filter();當我使用$(self).serialize();時,該函數被再次調用。我希望“外部”部分只在初始化時運行一次,而不是每次表單輸入更改時運行。我不明白這里發生了什么。如果有人能向我解釋為什么會這樣,我將不勝感激!
查看完整描述

1 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

問題是您正在重新定義 jQuery 的filter方法,該方法在其serialize方法內部使用。如果您更改名稱,它將起作用。的定義serialize如下所示:


jQuery.fn.extend( {

    serialize: function() {

        return jQuery.param( this.serializeArray() );

    },

    serializeArray: function() {

        return this.map( function() {


            // Can add propHook for "elements" to filter or add form elements

            var elements = jQuery.prop( this, "elements" );

            return elements ? jQuery.makeArray( elements ) : this;

        } )

        .filter( function() {

            var type = this.type;


            // Use .is( ":disabled" ) so that fieldset[disabled] works

            return this.name && !jQuery( this ).is( ":disabled" ) &&

                rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&

                ( this.checked || !rcheckableType.test( type ) );

        } )

        .map( function( _i, elem ) {

            var val = jQuery( this ).val();


            if ( val == null ) {

                return null;

            }


            if ( Array.isArray( val ) ) {

                return jQuery.map( val, function( val ) {

                    return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };

                } );

            }


            return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };

        } ).get();

    }

} );

工作示例:


(function($) {

  $.fn._filter = function(options) {

    console.log('Outside');


    var self = this;

    var settings = $.extend({}, options);


    this.on('change', ':input', function(e) {

      console.log('Inside');


      $(self).serialize();


    });


    return this;

  }

})(jQuery);


$('#filter-form')._filter();

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="filter-form">

  <input type="text">

</form>


查看完整回答
反對 回復 2022-12-29
  • 1 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號