Подтвердить что ты не робот

Что такое jQuery valHooks?

После прочтения valHooks в jQuery-дефекте и в последнее время в fiddle Я искал документацию jQuery и Google, но я не могу найти ничего, кроме короткого примера в jQuery 1.6 release post. Может кто-нибудь объяснить, что valHooks и почему они полезны?

4b9b3361

Ответ 1

Это набор функций, которые определяют, как получить/установить значения из элементов DOM.

Не все элементы могут быть установлены с помощью .value. Например, элемент select требует что-то вдоль строк select.options[select.selectedIndex].value.

Основной код показывает, например, как получить/установить значение элемента select:

select: {
        get: function( elem ) {
            var value,
                index = elem.selectedIndex,
                values = [],
                options = elem.options,
                one = elem.type === "select-one";

            // Nothing was selected
            if ( index < 0 ) {
                return null;
            }

            // Loop through all the selected options
            for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
                var option = options[ i ];

                // Don't return options that are disabled or in a disabled optgroup
                if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
                        (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {

                    // Get the specific value for the option
                    value = jQuery( option ).val();

                    // We don't need an array for one selects
                    if ( one ) {
                        return value;
                    }

                    // Multi-Selects return an array
                    values.push( value );
                }
            }

            // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
            if ( one && !values.length && options.length ) {
                return jQuery( options[ index ] ).val();
            }

            return values;
        },

        set: function( elem, value ) {
            var values = jQuery.makeArray( value );

            jQuery(elem).find("option").each(function() {
                this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
            });

            if ( !values.length ) {
                elem.selectedIndex = -1;
            }
            return values;
        }
    }

Ответ 2

Я сделал небольшую запись с простым примером здесь.

$.valHooks['myedit'] = {
    get : function(el) {
        return $(el).html();
    },
    set : function(el, val)
    {
        $(el).html(val);
    }
};

$.fn.myedit = function()
{
    this.each(function() {
        this.type = 'myedit';
    });
    return this;
}

$('#edit').myedit().val(' Hi there!');
$('#value').html('The value is : ' + $('#edit').val());

Ответ 3

valHooks позволяет вам переопределить поведение по умолчанию .val() для любого объекта, доступного для jQuery.