Seleccionar la última jQuery de entrada no sólo lectura

votos
0

Necesito seleccionar la última entrada no tener el readonlyatributo.

He tratado input:last:not([readonly])y input:not([readonly]):lastpero parece que no funcionan.

¿Algunas ideas?

EDITAR:

A medida que informó que trabaja para usted y he comprobado trabaja en su JS violín, aquí está el código ( JS violín aquí ):

Se supone que establecer el foco en la siguiente entrada cuando presione entrar en una entrada en la tabla, pero cuando se trata del último de entrada no sólo lectura, necesito establecer el foco en la entrada con la Barcodeetiqueta.

HTML

Barcode: <input name=barcode type=text id=formInput_91 class=form-control value= autocomplete=off>

<br>
<table id=table_invoiceProducts class=table>
   <thead>
      <tr>
         <th>Article</th>
         <th>Descriptio</th>
         <th>Price</th>
         <th>Tax</th>
         <th>Qty</th>
         <th>Subtotal</th>
         <th>Total</th>
      </tr>
   </thead>
   <tbody>
      <tr>
         <td><input type=text style=border: none; width: 32px; name=product[1543338984947183200][productId] class=adjustInputWidth input_productId value=456 readonly=></td>
         <td><input type=text style=border: none; width: 40px; name=product[1543338984947183200][description] class=adjustInputWidth input_description value=Test></td>
         <td><input type=number style=border: none; width: 58px; name=product[1543338984947183200][price] class=adjustInputWidth input_priceUnit data-id=1543338984947183200 value=25.00 min=0 step=0.01></td>
         <td><input type=number class=adjustInputWidth input_tax style=border: none; width: 50px; data-id=1543338984947183200 value=0.00 name=product[1543338984947183200][tax]></td>
         <td><input type=number value=1 min=1 style=border: none; width: 26px; data-id=1543338984947183200 class=input_quantity adjustInputWidth name=product[1543338984947183200][quantity]></td>
         <td><span style=color:#000; class=span_priceSubTotal data-id=1543338984947183200>25.00</span></td>
         <td><span style=color:#000; data-id=1543338984947183200 class=span_priceTotal>25.00</span></td>
      </tr>
      <tr>
         <td><input type=text style=border: none; width: 40px; name=product[1543338991430875154][productId] class=adjustInputWidth input_productId value=1234 readonly=></td>
         <td><input type=text style=border: none; width: 104px; name=product[1543338991430875154][description] class=adjustInputWidth input_description value=Product></td>
         <td><input type=number style=border: none; width: 58px; name=product[1543338991430875154][price] class=adjustInputWidth input_priceUnit data-id=1543338991430875154 value=50.00 min=0 step=0.01></td>
         <td><input type=number class=adjustInputWidth input_tax style=border: none; width: 50px; data-id=1543338991430875154 value=0.00 name=product[1543338991430875154][tax]></td>
         <td><input type=number value=1 min=1 style=border: none; width: 26px; data-id=1543338991430875154 class=input_quantity adjustInputWidth name=product[1543338991430875154][quantity] readonly=></td>
         <td><span style=color:#000; class=span_priceSubTotal data-id=1543338991430875154>50.00</span></td>
         <td><span style=color:#000; data-id=1543338991430875154 class=span_priceTotal>50.00</span></td>
      </tr>
   </tbody>
</table>

JS

    $( document ).ready(function() {

        $('#table_invoiceProducts').on('keydown', 'input:not(:last)', function(e){
            var keyCode = e.keyCode || e.which; 
            if(keyCode == 9 || keyCode == 13){
                e.preventDefault();
                $('#table_invoiceProducts input:not([readonly])')[$('#table_invoiceProducts input:not([readonly])').index(this)+1].focus();
                $('#table_invoiceProducts input:not([readonly])')[$('#table_invoiceProducts input:not([readonly])').index(this)+1].select();
            }
        });

        $('#table_invoiceProducts').on('keydown', 'input:not([readonly]):last', function(e){
            var keyCode = e.keyCode || e.which; 
            if(keyCode == 9 || keyCode == 13){
                e.preventDefault();
                $( '#formInput_91' ).focus();
            }
        });
    });
Publicado el 27/11/2018 a las 16:56
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Después de dormir durante 30 minutos, he encontrado la solución en un latido.

Como usted ha señalado, simplemente input:not([readonly]):lasthacer el truco. Así que, por qué no funcionó para mí?

Mi problema era debido a que la última entrada de sólo lectura no se vio afectada por los dos eventos publicados en los detalles de interrogación. Uno que se dispara cuando se pulsa Enter en el pasado no sólo lectura y otro que se dispara cuando pulse ENTER en cualquier no la última entrada.

Así que la solución era simplemente seleccionar todos los que no readonlyy cambiar el comportamiento después de comprobar si era la última o no.

JS violín: http://jsfiddle.net/60x47pu1/3/

Básicamente, puedo reemplazar el código JS publicado para esto:

$('#table_invoiceProducts').on('keydown', 'input:not(:last)', function(e){
    var keyCode = e.keyCode || e.which; 
    if(keyCode == 9 || keyCode == 13){
        e.preventDefault();

        if ($('#table_invoiceProducts input:not([readonly])').length == $('#table_invoiceProducts input:not([readonly])').index(this)+1){
            $( '#formInput_91' ).focus();
        }
        else
        {
            $('#table_invoiceProducts input:not([readonly])')[$('#table_invoiceProducts input:not([readonly])').index(this)+1].focus();
            $('#table_invoiceProducts input:not([readonly])')[$('#table_invoiceProducts input:not([readonly])').index(this)+1].select();
        }          
    }
});

Offtopic: Recuerde que debe dormir bien.

Respondida el 27/11/2018 a las 19:22
fuente por usuario

votos
0
$("input").filter(':not([readonly])').last()

ejemplo: https://codepen.io/filipemansano/pen/PxdmoW

Respondida el 27/11/2018 a las 17:11
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more