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