Только первое поле ввода автоматически заполняется функцией JQuery

0

Я пытаюсь получить форму для ввода ввода автоматически, когда пользователь помещает информацию в поле отснятого материала, которое затем должно быть подключено к уравнению с JQuery, а затем ответ должен выводиться в postQuantity. Поскольку пользователь может добавлять входные данные, форма устанавливается, что каждый кадр должен идти с соответствующим postQuantity, обозначенным его номером суффикса. Так что footage2 следует использовать для поиска postQuantity2 и 3 для 3 и так далее. Проблема в том, что только первое поле автоматически заполняется и что в любое время, когда меняется другой класс, ничего не происходит. Любое понимание того, где я поступил не так, и советы о том, как исправить это, будут очень признательны! Благодарю! Вот JSFiddle - http://jsfiddle.net/gv0029/TwH5n/

HTML:

    <form>
<fieldset id="fence">
    <div class="inputFence">
        <fieldset class="fenceDescripton">

            <legend><strong>Fence Description</strong></legend>
            <label>Footage<input name="footage_1" class="footage" /></label>
            <select name="fenceHeight_1" class="fenceHeight">
                <!--got rid of "select" from the value. not needed at all-->
                <option value="">Select Fence Height</option>
                <!--got rid of the ids completely. the numbers from the values are all you need-->
                <option value="6">6 Ft.</option>
                <option value="8">8 Ft.</option>
            </select>
        </fieldset>
        <fieldset class="post">
            <legend><strong>Post Type</strong>

            </legend>
            <label>Post Quantity:
                <input type="postQuantity" name="postQuantity_1" class="postQuantity" value="" />
            </label>
            <select name="postMeasurements_1" class="postMeasurements">
                <option value="">Select Post Measurements</option>
                <option value="23/8 x .065 x 8">2 3/8 x .065 x 8</option>
                <option value="23/8 x .095 x 8">23/8 x .095 x 8</option>
            </select>
        </fieldset>
    </div>
</fieldset>
<div>
    <input type="button" id="btnAddFence" value="Add Another Fence" />
    <input type="button" id="btnDelFence" value="Remove Fence" />
</div>


    </form>

JS:

//Quantity for Posts
    $("[class^='footage']").bind('keypress keydown keyup change', function(){
            var footage = parseFloat($(this).val(),10);
            var total = '';         
            var parts = $(this).attr('name').split("_");
            var fenceNumber = parts[1];

            if(!isNaN(footage)){
                total = Math.ceil(footage /7);
                $(":input[name='postQuantity_" + fenceNumber + "'" + ']').val(total.toString());
            } else {
                $(":input[name='postQuantity_" + fenceNumber + "'" + ']').val("");
            }
        });

//Dynamic Fence Input Fields
$('#btnAddFence').click(function () {

    // create the new element via clone()
    var newElem = $('.inputFence:last').clone();

    // insert the new element after the last "duplicable" input field
    $('.inputFence:last').after(newElem);

    // enable the "remove" button
    $('#btnDelFence').removeAttr('disabled');

    //get the input name and split into array (assuming your clone is always last)
    var parts = $('.fenceHeight:last').attr('name').split("_");
    //change the second element of the array to be one higher
    parts[1]++;
    //join back into a string and apply to the new element
    $('.fenceHeight:last').attr('name', parts.join("_"));

    //do the same for other two inputs
    parts = $('.postQuantity:last').attr('name').split("_");
    parts[1]++;
    $('.postQuantity:last').attr('name', parts.join("_"));

    parts = $('.postMeasurements:last').attr('name').split("_");
    parts[1]++;
    $('.postMeasurements:last').attr('name', parts.join("_"));

    parts = $('.footage:last').attr('name').split("_");
    parts[1]++;
    $('.footage:last').attr('name', parts.join("_"));


    // business rule: you can only add 5 names
    //if (newNum == 5)
    //$('#btnAdd').attr('disabled','disabled');
});

$('#btnDelFence').click(function () {
    //remove the last inputFence
    $('.inputFence:last').remove();

    // if only one element remains, disable the "remove" button
    if ($('.inputFence').length == 1) $('#btnDelFence').attr('disabled', 'disabled');
});

$('#btnDelFence').attr('disabled', 'disabled');
  • 1
    какое событие вы хотите отладить? нажатие клавиши на вводе? Я не вижу изменений на экране, независимо от того, что я делаю в скрипке. Я вижу ошибку в консоли jsfiddle: неожиданная строка. возможно, есть ошибка синтаксиса
  • 0
    Все события лол. Единственный раз, когда это работает, для первого набора входов. После этого ничего не происходит, когда вы вводите новые кадры. До этого в JS в строке 2 я использовал (event.trigger) вместо $ (this), но тогда по какой-то причине это сделало кадры NAN. Но когда у меня было это, консоль сказала, что после "$ (": input (name = 'postQuantity_ "+ fenceNumber +"' "+ ']'). Val (total.toString ());" , Поэтому я считаю, что это синтаксическая ошибка, но я ее не вижу.
Показать ещё 4 комментария
Теги:
forms
autocomplete

2 ответа

1
Лучший ответ

Я думаю, вы хотите что-то вроде этого:

http://jsfiddle.net/TwH5n/3/

строка, которую я изменил, была:

$(document.body).on('keydown', '[class^="footage"]'

это связывает событие со всеми будущими элементами [class ^ = "footage"] '

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

  • 0
    Спасибо, да, это было то, что я искал, и спасибо за объяснение!
1

Ошибка jsfiddle

В любом случае, вы используете метод.bind, который является обработчиком событий привязки к существующим существующим элементам. Вы можете использовать метод.live, который работает для селектора вместо элементов, но это устарело в версии 1.7 и удалено в 1.9

По состоянию на http://api.jquery.com/bind/

Для более гибкой привязки событий см. Обсуждение делегирования событий в.on() или.delegate().

Надеюсь это поможет

PS Правильный пример без использования устаревших методов

$('form').on('keypress keydown keyup change',"[class^='footage']", function(){});

http://jsfiddle.net/TwH5n/7/

  • 0
    Черт, это тот jsfiddle, который я хотел дать, мой плохой - jsfiddle.net/gv0029/TwH5n/1
  • 1
    Итак, вот обновленная скрипка, я просто изменил bind на live jsfiddle.net/TwH5n/2 (но он больше не работает в jQuery 1.9 и новее)
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню