2017-01-19 4 views
0
$(document).ready(function() { 

    var dynamicChargableForm = 1; 
    var dynamicDiscountForm = 1; 

    var selectedId = 1; 
    var newTextarea = null; 

    var chargableHeader = document.getElementById('chargable-header'); 
    var disountHeader = document.getElementById('discount-header'); 

    var execute = null; 

    $(document).on('keyup','.dynamic',function() { 

     var typeName = this.id.split('-')[0]; 

     switch(typeName) { 

     case 'chargable': 
      execute = dynamicRow(this, 'chargable', dynamicChargableForm , chargableHeader); 
      execute ? dynamicChargableForm++ : execute = null; 
      break; 

     case 'discount' : 
      execute = dynamicRow(this, 'discount', dynamicDiscountForm, disountHeader); 
      execute ? dynamicDiscountForm++ : execute = null; 
      break; 
     } 
    }); 
    }); 

    function dynamicRow(element, type , relatedTracker , relatedHeader) 
    { 
    selectedId = element.id.split('-')[1]; 

    if (selectedId == relatedTracker) 
    { 
     relatedTracker++; 

     newTextarea = document.createElement('TEXTAREA'); 
     newTextarea.setAttribute('name', type + '-' + relatedTracker); 
     newTextarea.setAttribute('class' , 'form-control dynamic ' + type); 
     newTextarea.setAttribute('id' , type + '-' + relatedTracker); 

     relatedHeader.append(newTextarea); 

     return true; 
    } 

    return false; 
    } 

Это моя первая попытка добавить динамически заполняемую текстовую область, когда пользователь вводит последнюю добавленную форму. Я хотел бы посоветовать и просмотреть мой код, поскольку я считаю, что этот код не очень эффективен. Я бы хотел получить лучшее понимание и точку зрения эксперта.Как улучшить код?

Спасибо

+2

Если ваш код работает, этот вопрос лучше подходит в http://codereview.stackexchange.com/ – kosmos

+0

О, я вижу .. Спасибо .. @kosmos –

+0

Это легко злоупотребить ':'. На первый взгляд я не могу понять, «казнь»? dynamicChargableForm ++: execute = null' делает правильные вещи. Возможно, это только я (я узнал, как 4 из 5 языков, которые реализуют один и тот же оператор, и они не все ведут себя точно так же, как и во всех обстоятельствах). –

ответ

0

Заменить

  execute = dynamicRow(this, 'chargable', dynamicChargableForm , chargableHeader); 
     execute ? dynamicChargableForm++ : execute = null; 

По

  if(dynamicRow(this, 'chargable', dynamicChargableForm , chargableHeader)) { 
      dynamicChargableForm++; 
     } 

Я не знаю, почему вам нужно добавить динамическое имя. Лучший способ - установить имя chargable[]. Затем поле будет отправлено на сервер как массив.

+0

Вы имеете в виду входное имя? Чтобы получить его в контроллере –

+0

Если вы используете 'chargeable []' в качестве имени входа, вы можете получить доступ ко всем значениям в контроллере как массив. Точный способ зависит от вашей структуры, но в PHP вы можете получить доступ к $ _POST ["chargeable"] [$ i]; ' – Michael2

+0

Я вижу .. Ya ya .. Это имеет смысл .. –

Смежные вопросы