У меня есть код JS / jQuery, работающий как брелок, пока я не хочу запустить другую функцию (у меня даже есть дубликаты некоторых функций, но, к счастью, такая же ошибка все еще не появляется, даже если исходная функция была запущена раньше)
Я проверил синтаксис и строку за строкой, но не повезло, пожалуйста, мне нужна другая пара глаз, чтобы увидеть то, что я не вижу.
Контекст: когда я нажимаю кнопку, он Откройте модальный ajax, я добавил несколько html подсвечиваний, если требуется полный код, пожалуйста, совет.
Ps. не носитель английского языка sh, извините за любую ошибку или понял с ней.
Код html (только важные строки, это оригинальный html тот, кто вызывает модал):
<form method="post" id="serviceOrdersAddForm" data-user-token="<?php echo $_SESSION['userToken']; ?>" action="main/serviceOrders/addController.php">
<a class="btn btn-info form-control addClientHandler" data-client-modal="true" id="serviceOrderServiceTypeIdBtn" href="ajax/addClientModal.php">Nuevo Cliente</a>
</form>
Код JS:
// ADD CLIENT MODAL
(function($) {
'use strict';
var ClientModal = {
initialize: function() {
this.$body = $( 'body' );
this.events();
},
events: function() {
var _self = this;
var elem;
this.$body.find( '[data-client-modal="true"]' ).on( 'click', function( e ) {
e.preventDefault();
elem = 'addClientHandler';
_self.show(elem);
console.log('hola');
});
return this;
},
clickBtn: function (){
$('.showFormErrors ul li').remove();
$('#clientsAddFormContainer > .showFormErrors').addClass('d-none');
var userToken = $('#serviceOrdersAddForm').attr('data-user-token');
var userRut = $('#serviceOrderCreationUserRut').attr('value');
var _self = this;
var parametros = {
"userToken" : userToken,
"userRut" : userRut,
"clientRut" : clientRut,
"clientType" : clientType,
"clientName" : clientName,
"clientMiddleName" : clientMiddleName,
"clientLastName" : clientLastName,
"clientSureName" : clientSureName,
"clientAddress" : clientAddress,
"clientCommuneId" : clientCommuneId,
"clientEmail" : clientEmail,
"clientphone" : clientphone
};
var url = 'main/clients/addController.php';
ajaxSetter(parametros, url, 'post').then( function(data){
//here success
// _self.hide();
}).catch(err => alert(err));
},
clientCheck: function ( clientType ){
var checkType = (clientType == 1) ? 'clientRut' : 'clientRut1';
var fieldName = $('#' + checkType).val();
var userToken = $('#serviceOrdersAddForm').attr('data-user-token');
var userRut = $('#serviceOrderCreationUserRut').attr('value');
var parametros = { "userToken" : userToken, "userRut" : userRut, "clientType" : clientType, "clientRut" : fieldName, "tableName" : 'clients' };
var url = 'main/clients/checkClient.php';
ajaxSetter(parametros, url, 'post').then( function(data){
if(data == "0"){
$("#clientRutStatusLbl").removeClass( "text-danger text-dark" ).addClass( "text-success" );
$("#clientRutStatusLbl").text("Cliente Nuevo");
$("#clientRutStatusLblInnerDiv").show();
$("#clientSubmitBtn").prop("disabled", false);
}else{
$("#clientRutStatusLbl").removeClass( "text-success text-dark" ).addClass( "text-danger" );
$("#clientRutStatusLbl").text("Cliente Registrado");
$("#clientRutStatusLblInnerDiv").show();
$("clientSubmitBtn").prop("disabled", true);
}
}).catch(function (err){
console.log(err);
});
},
show: function( elem ) {
var _self = this;
$('.'+elem).magnificPopup({
type: 'ajax',
callbacks: {
close: function() {
// console.log('Popup closed');
},
ajaxContentAdded: function() {
$('#clientRut').mask("99.999.999-*").focus(); //agrego mascara y focus al rut
$('#clientphone').mask("999-99999999");
$('#clientCommuneId').attr("data-source", "ajax/getCommunes.php") //instancio el select de comunas
.attr("data-valueKey", "id")
.attr("data-displayKey", "comuna")
.attr("data-plugin-selectTwo");
$('#clientCommuneId').attr("data-plugin-selectTwo"); //instancio el select de tipo usuario
setSelect2("clientCommuneId"); // inicializo el select de comunas
setSelect2("clientType"); // inicializo el select de comunas
loadSelectOptGrp("clientCommuneId");
$('#clientCommuneId').on('change', function() { //quito seleccione cuando muevo el select
deleteSelectDefault("clientCommuneId");
});
$('#clientType').on('change', function() { //listener cuando cambia tipo de cliente
_self.clientTypeChanged(this.value);
});
$('#clientRut').on('change', function( ) { // listener cuando dejo el campo clientRut
_self.clientCheck(1);
});
$('#submitBtnAddClientModal').click(function() { // listener cuando presiono enviar
_self.clickBtn();
});
}
}
});
},
hide: function() {
$.magnificPopup.close();
},
};
this.ClientModal = ClientModal;
$(function() {
ClientModal.initialize();
});
}).apply(this, [jQuery]);
есть некоторые глобальные вызовы функций, но я включаю только важный
/**
** Ejecuta una consulta ajax
** @param parametros incluye toda la data a enviar
** @param url el archivo donde se ejecuta el php
** @param type tipo, usualmente POST
**/
function ajaxSetter(parametros, url,type) {
return new Promise(function(resolve, reject) {
$.ajax({
url: url,
data: parametros,
type: type,
success: function(data) {
console.log('Ajax Success: ');
console.log(data);
resolve(data) // Resolve promise and go to then()
},
error: function(err) {
console.log('Ajax Success: ');
console.log(data);
reject(err) // Reject the promise and go to catch()
}
});
});
}
, есть много spangli sh в моем коде, я знаю: (
Итак, две проблемы, во-первых, каждый раз, когда я нажимаю на якорь addClientHandler
, я получаю вывод на консоль (функция "events", 7 строк console.log (' hola ');), мне нужно дважды щелкнуть, чтобы открыть де-модал, но я получил два "hola" на консоли, я знаю, что чего-то не хватает, чтобы открыть модал при первом щелчке.
Вторая проблема это когда я нажимаю submitBtnAddClientModal
, он должен запустить функцию clickBtn
, вместо этого в Chrome я получил
RangeError: Превышен максимальный размер стека вызовов "
и в Firefox
«InternalError:« слишком много рекурсии »
Это даже не делает Вызов XHR :( не уверен, что происходит.
Я даже заменил код на clickBtn
на код на clientCheck
(который работает плавно и нормально, независимо от того, когда и где я его вызываю, внутри свои пределы наверняка)
любой совет будет очень признателен,
заранее спасибо всем, кто пытается помочь!