2016-09-23 80 views
1

嘿開發人員我建立一個應用程序窗體,用戶在不同的領域輸入數據。該應用程序的一部分是來自https://github.com/wbraganca/yii2-dynamicform的動態表單。現在在動態表單中,我有一個依賴下拉菜單,但是當我單擊[+]時,依賴下拉菜單更改第一行上的數據,而不是第二行。動態窗體與依賴下拉

這裏是我的代碼。

在我的控制器

public function actionLists($name) 
    { 
     $countHs= Hs::find() 
         ->where(['hscode'=> $name]) 
         ->count(); 
     $Hs = Hs::find() 
       ->where(['hscode'=> $name]) 
       ->all(); 
     if($countHs > 0) 
     { 
      foreach ($Hs as $H) 
      { 
       echo "<option value='".$H->hsproduct."'> ".$H->hsproduct."</option>"; 


      } 
     }else{ 
       echo "<option> - </option>"; 
      } 


    } 

和我的形式

<div class="col-sm-6" style="width: 135px"> 
    <?= $form->field($modelsItems, "[{$i}]hscode")->dropDownList(
            ArrayHelper::map(Hs::find()->all(),'hscode','hsproduct'),      

             [ 


              'prompt'=>'', 

             'onchange'=> 

             '$.get("'.Url::toRoute('/hs/lists').'", { name: $(this).val() }) 
     .done(function(data) { $("#'.Html::getInputId($modelsItems, "[{$i}]hsproduct").'").html(data); });' 

              ])->label('HS.Code'); 


           ?> 

     </div> 
    <div class="col-sm-6" style="width: 135px"> 
    <?= $form->field($modelsItems, "[{$i}]hsproduct")->dropDownList(
            ArrayHelper::map(Hs::find()->all(),'hsproduct','hsproduct'), 
            [ 
            'prompt'=>'', 
            ])->label('HS.Product'); 
           ?> 
     </div> 

林更新了你的情況下,我的英語

+0

也許你可以顯示它的樣子的截圖?也許這會更容易理解。不知道我是否可以回答這個問題。 –

+0

這是屏幕截圖的鏈接。 http://imgur.com/a/nCISa – user5469526

+0

第一行如何工作?用你的JavaScript?實際上,我可以編寫一個JavaScript函數/事件來幫助您獲取特定字段的值。 –

回答

2

對不起新手。

我所做的是我在JS文件var i中聲明的全局變量,並分配了0。第一個事件被解僱後,我將變量i加1。現在它在內存中包含1個。下一次它將需要1並再次加1。依此類推:

var i = 0; 

$(document).on('change', 'select', function(e) { 
    i++; 
}) 

請注意,只有在每行中選擇一次而您不會回到特定行時才能使用。如果你想做這樣的事情,你應該獲取元素ID的編號,解析爲浮動(而不是字符串)並將該編號用於事件腳本。

parseFloat($('#hs-0-hscode')[0].id.split('-')[1]) 

留下一個額外的解決方案(但不是根據你的)。以防萬一。


使用Inspect source,找到你的輸入域的命名方式(姓名或ID)。比方說,我們有name="hs-0-hscode"。這是剛剛然後你的jQuery:

$(document).on('change', 'select', function(e) { 
    if ($(this)[0].id.indexOf('hscode') > 0) { 
     // Now you can use Ajax to get a list of items you want to show. 
     // Element itself can be reached: $(this).parent().parent().parent().children().eq(1); 
     // For example: 
     // var data = $.parseJSON(results); 
     // $.each(data, function(key, value) { 
     // $('#client-company_size') 
     //  .append($("<option></option>") 
     //  .attr("value", key) 
     //  .text(value)); 
     // }); 
    } 
}); 
+0

抱歉的延遲,問題是hs-0-hsproduct每次增加一個。因此下一行的id將是hs-1-hsproduct,並且如果用戶想要編輯hs-0-hsproduct它不允許它 – user5469526

+0

@ user5469526這是真的,這就是爲什麼我建議用'parseFloat'來使用那個。 –

+0

我有多個下拉菜單,但是當用戶選擇hs代碼時,與它鏈接的信息將顯示在下一個下拉菜單中。它建議使用下拉菜單或文本輸入?只是一個問題。 – user5469526