Quiero ejecutar esta función de clic en mi función de tecla de entrada

$('ul').on('click', 'li', function() {
      $(this).focus();
      valtext = $('li.active').attr('data-upc');
      $('#itemLookup').val(valtext);
     $scope.itemObj.searchStr = valtext
      $('#itemLookup').focus();
      });
  $('#itemLookup').on('keyup', function(e){
     if (e.keyCode == 13){
       $(this).focus();
      valtext = $('li.active').attr('data-upc');
      $('#itemLookup').val(valtext);
     $scope.itemObj.searchStr = valtext
      $('#itemLookup').focus();
     }

}); mi código clave de entrada no funciona No puedo conseguir el valor de valtexto dentro de la función clave de entrada

Pregunta hecha hace 3 años, 4 meses, 27 días - Por apiartisan


2 Respuestas:

  • El problema que estás experimentando se debe a que intentas acceder a valtext dentro de la función de la tecla de entrada (keyup) pero esta variable solo se define y se actualiza dentro de la función de clic (click). Para solucionar esto, puedes mover la definición de valtext a un ámbito más amplio para que pueda ser accedido por ambas funciones. A continuación, te muestro cómo podrías modificar tu código:

    javascript
    var valtext = '';
    
    $('ul').on('click', 'li', function() {
        $(this).focus();
        valtext = $('li.active').attr('data-upc');
        $('itemLookup').val(valtext);    $scope.itemObj.searchStr = valtext;
        $('itemLookup').focus();});
    
    $('itemLookup').on('keyup', function(e){    if (e.keyCode == 13){
            $(this).focus();
            $('itemLookup').val(valtext);        $scope.itemObj.searchStr = valtext;
            $('itemLookup').focus();    }
    });
    

    Al declarar var valtext = ''; fuera de las funciones, te aseguras de que valtext esté disponible y se pueda actualizar en ambas funciones. Ahora podrás acceder al valor de valtext tanto en la función de clic como en la función de tecla de entrada. ¡Espero que esto te ayude a solucionar tu problema! Si tienes alguna otra pregunta, ¡no dudes en decírmelo!

    Respondida el Dec 19, 2020 a las 13:22 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema es que valtext está declarado fuera del ámbito de la función de pulsación de tecla. Para solucionarlo, debes declarar valtext dentro de la función de pulsación de tecla o pasarla como argumento a la función.

    Aquí tienes un ejemplo de cómo puedes declarar valtext dentro de la función de pulsación de tecla:

    javascript
    $('itemLookup').on('keyup', function(e){  if (e.keyCode == 13){
        var valtext = $('li.active').attr('data-upc');
        $('itemLookup').val(valtext);    $scope.itemObj.searchStr = valtext
        $('itemLookup').focus();  }
    });
    

    O puedes pasar valtext como argumento a la función de pulsación de tecla:

    javascript
    $('itemLookup').on('keyup', function(e, valtext){  if (e.keyCode == 13){
        $('itemLookup').val(valtext);    $scope.itemObj.searchStr = valtext
        $('itemLookup').focus();  }
    });
    

    Y luego llamar a la función de pulsación de tecla pasando valtext como argumento:

    javascript
    $('ul').on('click', 'li', function() {
      $(this).focus();
      valtext = $('li.active').attr('data-upc');
      $('itemLookup').val(valtext);  $scope.itemObj.searchStr = valtext
      $('itemLookup').trigger('keyup', [valtext]);});
    

    Respondida el Dec 19, 2020 a las 13:24 - por Gemini

    Votos positivos: 0 | Votos negativos: 0