2017-07-06 5 views
1

Wie kann ich den Autofokus hinzufügen und im editierbaren Gridview-Feld auswählen?Autofokus auf editierbares Gridview-Feld

Ich möchte Editacle Feld Autofokus und AutoSelect machen. Hier ist mein Gridview-Code:

<?php Pjax::begin(); ?> 
    <?= GridView::widget([ 
     'dataProvider'=>$dataProvider, 
     'filterModel'=>$searchModel, 
     'showPageSummary'=>true, 
     'pjax'=>true, 
     'striped'=>true, 
     'hover'=>true, 
     'responsiveWrap' => false, 
     'panel'=>['type'=>'primary', 'heading'=>$partner_name], 
     'columns'=>[ 
      [ 
       'attribute' => 'city_code', 
       'label' => 'City Code', 
      ], 
      [ 
       'class'=>'kartik\grid\EditableColumn', 
       'editableOptions'=>[ 
        'asPopover' => false, 
        'inputType'=>\kartik\editable\Editable::INPUT_TEXT, 
       ], 

       'attribute'=>'amount', 
       'label'=>'Amount', 

      ], 
     ], 
    ]); 

    ?> 
<?php Pjax::end() ; ?> 
+0

post your gridview code hier –

+0

@SardorDushamov, Ich habe meine Gridview-Code auf meine Frage hinzugefügt, Danke. – adn

Antwort

0

mit diesem Versuchen JS-Code:

$("form input:text, form textarea").first().focus(); 
+0

es funktioniert @Sardor nicht. – adn

1

Wie kartik here erwähnt, das bearbeitbare Widget gibt keine APIs für Fokus; Sie müssen dies in Javascript tun.

So müssen Sie die popover modal von id finden (standardmäßig ist es so etwas wie „<modelname>-<rowid>-<attributename>-popover‚genannt), und erklären, dass, nachdem er gezeigt wird, innerhalb der Anzeige (‘<modelname>-<rowid>-<attributename>-disp“) ausgewählt werden muss.

Also, so etwas wie

<?php 
    $this->registerAssetBundle(yii\web\JqueryAsset::className(), \yii\web\View::POS_HEAD); // in case you don't have jQuery set 
?> 
<script type="text/javascript"> 
$(document).ready(function() { 
    for (rowid=0; rowid<10; row++) { // or some other form of iterating over your rows 
    popover_id = "#city-" + rowid + "-amount-popover"; // replace city and amount with your model name and your attribute name 
    $(popover_id).on('shown.bs.modal', function(event) { 
     // setTimeout(function() { 
     display_id = "#"+event.target.id.replace(/popover$/,'disp'); 
     $(display_id).select(); 
     // }, 10); 
    }); 
    } 
}); 
</script> 

Hinweis, dass es zwei Linien kommentierte, dass die select() Anruf innerhalb einer Timeout-wickeln. Abhängig von Ihrem System könnte es take some time between the display of the popover and the instantiation of the display (so you can focus and select on it) sein. Wenn dies der Fall ist, müssen Sie diese Zeilen auskommentieren.

+0

es funktioniert nicht. Von was kommen Rowid und Row? – adn

+0

Sie müssen sich das DOM ansehen, das generiert wird, und herausfinden, was die IDs in Ihren Zeilen sind. – onigame

+0

okey ich habe es, ich habe festgestellt, dass meine Zeilen-IDs sind "Datenschlüssel" aber es funktioniert immer noch nicht. Was sollte ich dann tun? – adn