Jquery скрыть метку, если вход содержит значение - PullRequest
1 голос
/ 17 ноября 2011

Я использую следующий код, чтобы скрыть и показать метку в моей форме с помощью Jquerys onBlur и Focus.

Все работает, кроме метки, показывающей, когда в одном из входов есть значение. (Я передаю значения в мои входы, используя php, когда проверка не проходит, поэтому пользователям не нужно вводить заново)

Как я могу получить следующий код, чтобы проверить, имеет ли вход значение, и если да, то скрыть метку и показать ее снова, когда значение пусто:

CSS

div#first-name,
div#last-name,
div#email-address,
div#password
 {
    position:relative;
    float:left;
    margin-right:3px;
}
label.overlabel {
    color:#999;
}
label.overlabel-apply {
    position:absolute;
    top:3px;
    left:5px;
    z-index:1;
    color:#999;
    padding-left:10px;
    padding-top:10px;
}

Входной сигнал:

   <div id="first-name">
 <label for="first-name-field" class="overlabel">First name</label>
 <input id="first-name-field" type="text" name="first_name" />
   </div>

Javascript:

$(document).ready(function() {



    // plugin definition
    $.fn.overlabel = function( options ) {

        // build main options before element iteration
        var opts = $.extend( {}, $.fn.overlabel.defaults, options );

        var selection = this.filter( 'label[for]' ).map( function() {

            var label = $( this );
            var id = label.attr( 'for' );
            var field = document.getElementById( id );

            if ( !field ) return;

            // build element specific options
            var o = $.meta ? $.extend( {}, opts, label.data() ) : opts;

            label.addClass( o.label_class );

            var hide_label = function() { label.css( o.hide_css ) };
            var show_label = function() { this.value || label.css( o.show_css ) };

            $( field ).
                 parent().addClass( o.wrapper_class ).end().
                 focus( hide_label ).blur( show_label ).each( show_label );

        //How to hide label if input contains value

            return this;

        } );

        return opts.filter ? selection : selection.end();
    };

    // publicly accessible defaults
    $.fn.overlabel.defaults = {

        label_class:   'overlabel-apply',
        wrapper_class: 'overlabel-wrapper',
        hide_css:      { 'text-indent': '-10000px' },
        show_css:      { 'text-indent': '0px', 'cursor': 'text' },
        filter:        false

    };

$(document).ready(function() {
    $("label.overlabel").overlabel();
});

Ответы [ 4 ]

7 голосов
/ 17 ноября 2011

почему бы не использовать что-то вроде

if ($(field).val() != ""){
  var fieldId = $(field).attr("id");
  $("label[for='"+fieldId+"']").hide();
}

, напечатанное без проверки синтаксиса.

0 голосов
/ 17 ноября 2011

Все это кодирование могло бы быть сведено к следующему:

jQuery('#form-id input').blur( function () {
    if ($(this).val() == '') 
        $(this).parents("div").find("label[for=" + this.id + "]").show().text();
}).focus( function () {
    $(this).parents("div").find("label[for=" + this.id + "]").hide().text();
});

==> using this approach, make sure that label is 
    hard coded with "overlabel-apply"

==> also, to have a whole form scope (in case you are not putting each
    input in a div), change $(this).parents("div") to $(this).parents("#form-id")

Удачи!

0 голосов
/ 17 ноября 2011
$(document).ready(function(){
   $('#form-id input').each(function() { if($(this).val().length > 0) $('#form-id label[for="' + $(this).attr('id') + '"]').hide();
$(this).change(function() {
   if($(this).val().length > 0)
       $('#form-id label[for="' + $(this).attr('id') + '"]').hide();
   else 
       $('#form-id label[for="' + $(this).attr('id') + '"]').show();
});
 });

});

это могло бы помочь вам, я искал входные значения при загрузке и, если есть метка скрытия значения, связанная с этим входом, а также я прикрепил событие "onChange", если есть значение на размытии, то скрыть метку.

0 голосов
/ 17 ноября 2011

Репальс

var show_label = function() { this.value || label.css( o.show_css )

с

var show_label = function() { field.value || label.css( o.show_css )
...