JQuery: создать несколько полей ввода на основе того, сколько мы выбираем - PullRequest
1 голос
/ 27 марта 2012

Мне нужно создать input поля, на основе которых было выбрано число из меню select, например:

<select id="inputs" style="width:60px;">
    <option>1</option>
    <option>2</option>
    <option>3</option>                      
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option>
    <option>10</option>
</select>

Когда мы выберем 10, input поля увеличатся до10 в то же время, когда я выбираю 2, оно не уменьшается с 10 до 2: (

Я думаю, что лучшим способом может быть использование replace() с циклом; к сожалению, я не смог получитьрешение.

$(document).ready(function() {
    var scntDiv = $('#add_words');
    var wordscount = 0;
    var i = $('.line').size() + 1;

    $('#inputs').change(function() {
        var inputFields = parseInt($('#inputs').val());
        for (var n = i; n < inputFields; ++ n){
            wordscount++;
            $('<div class="line">Word is ' + wordscount + '<input type="text" value="' + wordscount + '" /><a class="remScnt" href="#">Remove</a></div>').appendTo(scntDiv);
            i++;
        }  
        return false;
    });

    //    Remove button
    $('#add_words').on('click', '.remScnt', function() {
        if (i > 1) {
            $(this).parent().remove();
            i--;
        }
        return false;
    });
});

Не могли бы вы помочь мне, пожалуйста?

Ответы [ 5 ]

2 голосов
/ 27 марта 2012

Я понимаю, что вы уже приняли ответ на этот вопрос, но я не был рад оставить вопрос как есть. Также: мне было немного скучно. Сделай из того, что ты будешь ...

Так! Вот мой (запоздалый) ответ.

Преимущества моего подхода или его обоснования:

  1. Вы можете использовать select для удаления и добавления строк.
  2. При удалении строк с использованием select для удаления строк сначала удаляются эти строки с пустыми input s, а затем удаляется любое количество заполненных input-содержащих строк с конца.
  3. Позволяет также использовать ссылки .remScnt.

Надеюсь, это что-то, даже академическое, для вас или интересное:

function makeRow() {
    var div = document.createElement('div'),
        input = document.createElement('input'),
        a = document.createElement('a');
        t = document.createTextNode('remove');
    div.className = 'line';
    input.type = 'text';
    a.href = '#';
    a.className = 'remScnt';
    a.appendChild(t);
    div.appendChild(input);
    div.insertBefore(a, input.nextSibling);

    return div;
}


$('#inputs').change(

function() {
    var num = $(this).val(),
        cur = $('div.line input:text'),
        curL = cur.length;
    if (!curL) {
        for (var i = 1; i <= num; i++) {

            $(makeRow()).appendTo($('body'));
        }
    }
    else if (num < curL) {
        var filled = cur.filter(

        function() {
            return $(this).val().length
        }),
            empties = curL - filled.length,
            dA = curL - num;

        if (empties >= num) {
            cur.filter(

            function() {
                return !$(this).val().length;
            }).parent().slice(-num).remove();
        }
        else if (empties < num) {
            var remainder = num - empties;
            cur.filter(

            function() {
                return !$(this).val().length;
            }).parent().slice(-num).remove();
            $('div.line').slice(-remainder).remove();
        }
    }
    else {
        var diff = num - curL;
        for (var i = 0; i < diff; i++) {
            $(makeRow()).appendTo($('body'));
        }
    }
});
$('body').on('click', '.line a.remScnt', function() {
    console.log($(this));
    $(this).parent().remove();
});​

JS Fiddle demo .

Обратите внимание, что я предпринял небольшую, или (точнее) нет, попытку обеспечить кросс-браузерную простоту использования с этим. Нативные методы DOM, используемые в функции makeRow(), используются для (незначительной оптимизации увеличения) скорости, при этом использование jQuery (с его кросс-браузерными абстракциями может сделать вещи еще более надежными. И стоит задуматься.

Ссылки:

  1. Родной ванильный JavaScript:

  2. jQuery материал:

2 голосов
/ 27 марта 2012

Попробуй

$(function(){
    $('#inputs').change(function(){
        for(i=0; i < $("select option:selected").text; i++)
        {
            $('#divIdHere').append('<input blah blah />');
        }
    })
});

явно поменяй для масти:)

1 голос
/ 27 марта 2012

хорошо, измените его немного, чтобы можно было создать новый список.

$(function(){
    $('#inputs').change(function(){
        $('#divIdHere').empty()
        for(i=0; i < $("select option:selected").text; i++)
        {
            $('#divIdHere').append('<input blah blah />');
        }
    })
});

, который в основном опустошит содержимое div перед добавлением их всех обратно:)

0 голосов
/ 27 марта 2012

Вы можете добавлять новые строки только для того, чтобы составить количество строк, когда значение селектора увеличивается, и удалять «лишние» строки только тогда, когда оно уменьшается.

$( document ).ready(
    function() {
        var divs = $( 'div#add_words' );
        $( '#inputs' ).change(
            function(evt) {
                var n = $( this ).val();
                var lines = $( 'div.line' );
                var numlines = lines.size();
                if( n > numlines ) {
                    // We want more line. Add some.
                    while( n > numlines ) {
                        numlines += 1;
                        divs.append( '<div class="line">Line ' + numlines + '</div>' );
                    }
                }
                else {
                    // Remove everything after the n'th line.
                    lines.slice( n ).remove();
                }
            } )
        .change();
    } );
0 голосов
/ 27 марта 2012

вам нужно сделать DIV перед использованием просто попробуйте этот HTML

<select id="inputs" style="width:60px;">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>                      
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
</select>
<div id="add_words"></div>

и Jquery с этой важной строкой scntDiv.empty();

JQuery

$(document).ready(function() {
    var scntDiv = $('#add_words');
    var wordscount = 1;
    var i = $('.line').size() + 1;

    $('#inputs').change(function() {
        var inputFields = parseInt($('#inputs').val());
          scntDiv.empty()
          for (var i = 0; i < inputFields; i++){
            scntDiv.append($('<div class="line">Word is ' + wordscount + '<input type="text" value="' + wordscount + '" />'));
          }
    });
});

1011 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...