JQuery - No se ejecuta evento focusout de un elemento de formulario

 
Vista:
Imágen de perfil de Matías

No se ejecuta evento focusout de un elemento de formulario

Publicado por Matías (3 intervenciones) el 19/12/2023 19:28:53
Tengo un sitio para gestión de un sindicato desarrollado en cakephp, en el tengo una vista donde la empresa empleadora registra un aporte para un empleado de su staff, en ella ingreso el número de cuil del empleado y me trae los datos del empleado y me muestra una grilla con los conceptos que le corresponde liquidar dependiendo si es afiliado o no del sindicato, en esa grilla muestro la descripción del concepto y un campo para ingresar el monto de la remuneración imponible, al ingresar el importe y apretar tab o hacer clic con el mouse en otra parte de la pantalla me debería hacer el cálculo de los otros conceptos y los debería poner en los campos de los otros conceptos (los cuales están deshabilitados), pero no hace nada.
Este es el código de la acción query donde consulto los datos del empleado y traigo los conceptos que corresponden liquidar para este empleado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public function query()
    {
		$this->viewBuilder()->setLayout('ajax');
		$this->loadModel('Concepts');
		$jsonResponse = ["affiliate_id" => "", "firstname" => "", "lastname" => "", "is_affiliated" => "", "html" => ""];
		if ($this->request->is('ajax')) {
			$cuil = $this->request->getData('cuil');
			$affiliates = $this->Affiliates->find('all')->where(['cuil' => $cuil, 'enterprise_id' => $this->enterprise_id])->first();
			$concept_id = $affiliates->is_affiliated ? [1,2,4,5] : [1,3,4,5];
			$concepts = $this->Concepts->find('all')->where(['Concepts.id in' => $concept_id]);
			$html = "<table id='tabla'><thead><tr><th>Concepto</th><th>Importe</th></tr></thead><tbody>";
			$i = 0;
			foreach ($concepts as $concept){
				$disabled = !empty($i) ? " disabled=true" : "";
				$html .= "<tr><td>".$concept->description."</td><td><input type='number' name='affiliates_contributions[".$i."][amount]'".$disabled
					." class='amount' data-id='".$i."' id='amount-".$i."' />";
				$html .= "<input type='hidden' name='affiliates_contributions[".$i."][affiliate_id]' class='affiliate_id' />";
				$html .= "<input type='hidden' name='affiliates_contributions[".$i."][concept_id]' value='".$concept->concept_id."' id='concept_id-".$i."' /></td></tr>";
				$i++;
			}
			$html .= "</tbody></table>";
		}
		$jsonResponse = ["affiliate_id" => $affiliates->id, "firstname" => $affiliates->firstname, "lastname" => $affiliates->lastname,
			'is_affiliated' => $affiliates->is_affiliated, 'html' => $html];
		$this->set(compact('jsonResponse'));
	}
Y este es el código de la vista donde se registra el aporte del empleado:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
/**
 * @var \App\View\AppView $this
 * @var \App\Model\Entity\Contribution $contribution
 * @var \Cake\Collection\CollectionInterface|string[] $enterprises
 * @var \Cake\Collection\CollectionInterface|string[] $affiliates
 * @var \Cake\Collection\CollectionInterface|string[] $concepts
 */
?>
<div class="row">
    <?php
		$this->Breadcrumbs->add([
			['title' => 'Inicio', 'url' => ['controller' => 'Home', 'action' => 'index'], 'options' => ['class' => 'breadcrumb-item']],
			['title' => 'Declaraciones Juradas', 'url' => ['action' => 'index'], 'options' => ['class' => 'breadcrumb-item']],
			['title' => 'Agregar Declaración Jurada', 'options' => ['class' => 'breadcrumb-item']],
		]);
	?>
	<?= $this->Breadcrumbs->render(['class' => 'breadcrumb']) ?>
    <div class="column-responsive column-80">
        <div class="contributions form content">
            <?= $this->Form->create($contribution) ?>
            <fieldset>
                <legend><?= __('Nueva Declaración Jurada') ?></legend>
                <?php
					$date = new DateTime($periodMax->period."-01");
					$date = $date->modify("+1 month");
					$fecha = $this->Time->fromString($date);
					$period = $fecha->i18nFormat("yyyy-MM");
					$sword_declaration_number = $sword_declaration_numberMax->sword_declaration_number + 1;
					echo $this->Html->tag("div",
						 $this->Html->tag("span", $this->Form->control('cuil', ['label' => 'CUIL', 'id' => 'cuil']), ["class"=>"label-inline"])
						.$this->Html->tag("span", $this->Html->link($this->Html->tag("span", "", ["class"=>"glyphicon glyphicon-search"]), ['controller' => 'Affiliates',
						'action' => 'search', $enterprise_id], ['escape' => false, 'title' => 'Buscar afiliados', 'rel' => 'pop-up']), ["class"=>"label-inline"])
						.$this->Html->tag("span", $this->Form->control('lastname', ['label' => 'Apellido']), ["class"=>"label-inline"])
						.$this->Html->tag("span", $this->Form->control('firstname', ['label' => 'Nombre']), ["class"=>"label-inline"])
						.$this->Html->tag("span", $this->Form->hidden('is_affiliated', ['id' => 'is-affiliated']), ["class"=>"label-inline"]));
					echo $this->Html->tag("div",
						 $this->Html->tag("span", $this->Form->control('sword_declaration_number', ['label' => 'Número de declaración jurada', 'value' => $sword_declaration_number]), ["class"=>"label-inline"])
						.$this->Html->tag("span", $this->Form->control('period', ['label' => 'Período', 'type' => 'month', 'value' => $period]), ["class"=>"label-inline"])
						.$this->Html->tag("span", $this->Form->control('affiliates_contributions.0.admission_date', ['label' => 'Fecha de ingreso']), ["class"=>"label-inline"])
						.$this->Html->tag("span", $this->Form->control('affiliates_contributions.0.discharge_date', ['label' => 'Fecha de baja', 'empty' => true]),
						["class"=>"label-inline"]));
					echo $this->Html->tag("div", "", ["class" => "table-responsive"]);
				?>
            </fieldset>
            <?= $this->Form->button(__('Guardar')) ?>
            <?= $this->Form->end() ?>
        </div>
    </div>
</div>
<script>
$(document).ready( function() {
	$("a[rel='pop-up']").click(function () {
		var caracteristicas = "height=700,width=800,scrollTo,resizable=1,scrollbars=1,location=0";
		nueva=window.open(this.href, 'Popup', caracteristicas);
		$('#cuil').focus();
		return false;
	});
})
$(function(){
	$('#cuil').focusout(function(){
		$.ajax({
			method:"POST",
			url:"<?= $this->Url->build(['controller' => 'Affiliates', 'action' => 'query']) ?>",
			data:{
				cuil:$(this).val()
			},
			success: function(data) {
				parsedData = JSON.parse(data);
				if(parsedData){
					$('.affiliate_id').val(parsedData.affiliate_id);
					$('#lastname').val(parsedData.lastname);
					$('#firstname').val(parsedData.firstname);
					$('#is-affiliated').val(parsedData.is_affiliated);
					$('.table-responsive').html(parsedData.html);
				}
			},
			headers:{
				'X-CSRF-Token':$('meta[name="csrfToken"]').attr('content')
			}
		})
	});
})
$(function(){
	$('.amount').focusout(function(){
		alert('entra');
		const formato = new Intl.NumberFormat('en-US', {
			useGrouping: false,
			maximumFractionDigits: 2,
			minimumFractionDigits: 2
		});
		$.ajax({
			method:"POST",
			url:"<?= $this->Url->build(['action' => 'calculate']) ?>",
			data:{
				amount:$(this).val(),
				is_affiliated:$('#is-affiliated').val()
			},
			success: function(data) {
				parsedData = JSON.parse(data);
				if(parsedData){
					for(var i=0; i<parsedData.length; i++) {
						var j = i + 1;
						$('#monto-'+j).val(formato.format(parsedData[i].amount));
					}
				}
			},
			headers:{
				'X-CSRF-Token':$('meta[name="csrfToken"]').attr('content')
			}
		})
	});
})
</script>
Aclaro que cuando hago clic en Ver código fuente de la página no aparece el código de la tabla que genero cuando consulto los datos del empleado en la acción query.
¿Cómo puedo solucionar este problema?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder