За последние 24 часа нас посетили 34084 программиста и 1319 роботов. Сейчас ищут 1026 программистов ...

Написал плагинчик jQuery.dynput

Тема в разделе "JavaScript и AJAX", создана пользователем igordata, 15 авг 2011.

  1. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    такой элемент, который становится инпутом, если на него кликнуть.

    боян небось, но я не нашел, когда надо было, и написал вот.


    Код написан под меня, он юзает две функции - они есть на странице примера. Просто группирует цифры. Их можно вытереть из плагина. Мне лень.


    Пример:
    http://datai.ru/dynput.html

    Вот код:
    [js]$(document).ready(function() {
    jQuery.fn.cuckoo = function (code) {
    eval(code);
    }

    jQuery.fn.dynput = function (options) {
    var options = jQuery.extend({
    label: '...',
    value: false,
    input_width: 100,
    label_max_length: 15,
    label_class: '',
    label_prefix: '',
    label_suffix: ''
    },options);
    return this.each(function() {
    var opt = options;
    var name = $(this).attr('name');
    $(this).wrap('<div class="dynputbox" id="dynputbox-'+name+'" />');
    $(this).addClass('dynput_hidden');
    $(this).removeClass('dynput');
    $(this).hide();
    if ($(this).val() == '') {
    $(this).val(opt.value ? opt.value : '');
    }
    if ($(this).attr('label') == '' || (typeof $(this).attr('label') == 'undefined')) {
    $(this).attr('label',opt.label);
    } else {
    opt.label = $(this).attr('label');
    }
    if ($(this).attr('label_prefix') == '' || (typeof $(this).attr('label_prefix') == 'undefined')) {
    $(this).attr('label_prefix',opt.label_prefix);
    } else {
    opt.label_prefix = $(this).attr('label_prefix');
    }
    if ($(this).attr('label_suffix') == '' || (typeof $(this).attr('label_suffix') == 'undefined')) {
    $(this).attr('label_suffix',opt.label_suffix);
    } else {
    opt.label_suffix = $(this).attr('label_suffix');
    }
    if ($(this).attr('label_max_length') == '' || (typeof $(this).attr('label_max_length') == 'undefined')) {
    $(this).attr('label_max_length',opt.label_max_length);
    } else {
    opt.label_max_length = $(this).attr('label_max_length');
    }
    if ($(this).attr('input_width') == '' || (typeof $(this).attr('input_width') == 'undefined')) {
    $(this).attr('input_width',opt.input_width);
    } else {
    opt.input_width = $(this).attr('input_width');
    }
    $(this).parent().css('display','inline').append('<div class="dynput_ui '+opt.label_class+'">'+$(this).attr('label_prefix')+($(this).val() == '' ? opt.label : $(this).val())+$(this).attr('label_suffix')+'</div>');
    $(this).parent().css('cursor', 'pointer');
    var dynput_ui = $(this).siblings('div.dynput_ui').first();
    dynput_ui.css('display','inline');
    $(this).parent().click(function(e){
    e.stopPropagation();
    var divui = $(this).children('div.dynput_ui').first();
    divui.html('<input class="dynput_input">');
    var input = $(this).children('div.dynput_ui').first().children('input.dynput_input').first();
    input.css('margin', '-5px 0 -3px -2px');
    input.css('width', divui.siblings('input.dynput_hidden').attr('input_width'));
    input.css('font-size', '1em');
    input.css('border', '1px solid white');
    input.animate({borderColor:'#999999'}, { duration: 200, queue: false });
    input.val(divui.siblings('input.dynput_hidden').val());
    var tmp = input.val()
    input.focus();
    input.val('');
    input.val(tmp)
    input.click(function(e){
    e.stopPropagation();
    });
    var cancel = false;
    input.keypress(function(e) {
    cancel = false;
    if (e.keyCode == '27') {
    cancel = true;
    input = $(this).parent().siblings('input.dynput_hidden').first();
    val = input.val().GroupDigits();
    if (val == '') {
    $(this).parent().text(input.attr('label_prefix')+$(this).parent().siblings('input.dynput_hidden').first().attr('label')+input.attr('label_suffix'));
    } else {
    if (val.length > input.attr('label_max_length')) {
    $(this).parent().html(input.attr('label_prefix')+'<acronym title="'+val.replace(/\"/g,"'")+'">'+val.substr(0,input.attr('label_max_length'))+'...</acronym>'+input.attr('label_suffix'));
    } else {
    $(this).parent().text(input.attr('label_prefix')+val+input.attr('label_suffix'));
    }
    }
    e.stopPropagation();
    e.stopImmediatePropagation();
    }
    if (e.which == '13') {
    input = $(this).parent().siblings('input.dynput_hidden');
    e.preventDefault();
    var val = $(this).val();
    if (val !== $(this).parent().siblings('input.dynput_hidden').val()) {
    //onchange:
    input.val(val);
    input.parent().attr('value', val);
    $(this).parent().parent().cuckoo(input.attr('change'));
    }
    val = val.GroupDigits();
    if (val == '') {
    $(this).parent().siblings('input.dynput_hidden').val(null);
    $(this).parent().text(input.attr('label_prefix')+$(this).parent().siblings('input.dynput_hidden').first().attr('label')+input.attr('label_suffix'));
    } else {
    if (val.length > input.attr('label_max_length')) {
    $(this).parent().html(input.attr('label_prefix')+'<acronym title="'+val.replace(/\"/g,"'")+'">'+val.substr(0,input.attr('label_max_length'))+'...</acronym>'+input.attr('label_suffix'));
    } else {
    $(this).parent().text(input.attr('label_prefix')+val+input.attr('label_suffix'));
    }
    }
    }
    });
    input.focusout(function(){
    if (!cancel) {
    input = $(this).parent().siblings('input.dynput_hidden');
    var val = $(this).val();
    if (val !== $(this).parent().siblings('input.dynput_hidden').val()) {
    //onchange:
    input.val(val);
    input.parent().attr('value', val);
    $(this).parent().parent().cuckoo(input.attr('change'));
    }
    val = val.GroupDigits();
    if (val == '') {
    $(this).parent().siblings('input.dynput_hidden').val(null);
    $(this).parent().text(input.attr('label_prefix')+$(this).parent().siblings('input.dynput_hidden').first().attr('label')+input.attr('label_suffix'));
    } else {
    if (val.length > input.attr('label_max_length')) {
    $(this).parent().html(input.attr('label_prefix')+'<acronym title="'+val.replace(/\"/g,"'")+'">'+val.substr(0,input.attr('label_max_length'))+'...</acronym>'+input.attr('label_suffix'));
    } else {
    $(this).parent().text(input.attr('label_prefix')+val+input.attr('label_suffix'));
    }
    }
    }
    });
    });
    });
    };
    });[/js]
     
  2. Ric

    Ric Активный пользователь

    С нами с:
    9 фев 2011
    Сообщения:
    97
    Симпатии:
    2
    Нормуль =)