Как я могу использовать одну и ту же частную переменную в двух функциях

Итак, у меня есть 2 функции. Проблема в переменной styep_id. Я знаю, что могу просто объявить это во вторых функциях, но тогда он не будет извлекать данные из первой функции. Так вот вопрос how i can use the same variable without lost data on him

P.S Это не должна быть общедоступная переменная, потому что она не будет работать. Он не будет хранить данные.

    function delete_estimate_position_type() {
        var estpt_tr_jqobj, estpt_action_links_td_jqobj, styep_id, authenticity_token, request_url, stya_id;

        styep_id = $(this).attr("styep_id");

        // Ja ir tikko kā pievienots, tad tikai izmetīsim ārā no DOM
        if (!styep_id == "") {
            estpt_action_links_td_jqobj = $(this).parent();
            estpt_tr_jqobj = estpt_action_links_td_jqobj.parent();
            stya_id = $("td.service-type-est-position-estimate-position-type-name>input.stya-id-for-styep", estpt_tr_jqobj).val();
            estpt_tr_jqobj.remove();
            show_stya_delete_link_if_possible(stya_id);
            remove_estpgt_if_has_no_estpt($(this).attr("estpgt_id"));
        }
}

А также

function save_configuration(){
  var estpt_for_estpgt = "";
  // Pārbaudam vai visām tāmes pozīciju grupām ir norādītas tāmes pozīcijas
  $('.estpt-for-estpgt').each(function(){
    if ($(this).find('tr.action_record_tr').size() == 0){
      estpt_for_estpgt = this;
      return false;
    }
  })

  if (estpt_for_estpgt == "") {
    var form = $(this).closest('form');
    form.submit();
            // Dzēsīsim ārā no datu bāzes
            authenticity_token = $("#authenticity_token").val();
            request_url = "/service_type_est_positions/" + styep_id + "/destroy_from_service_type_config";

            $.post(request_url, { authenticity_token: authenticity_token}, process_service_type_est_position_delete, "json");
  } else {
    $.alerts.okButton = 'Labi';
    jError("Vismaz vienai Tāmes pozīciju grupai nav norādīta neviena Tāmes pozīcija!", "Kļūda");
  }

  return false;
}

function remove_estpgt_if_has_no_estpt(estpgt_id) {
    // Paskatīsimies vai eksistē kāda tāmes pozīcija
    if ($("#estpt_for_" + estpgt_id + ">tr:first").size() == 0) {
        $("#estpgt_" + estpgt_id).remove();
        $("#estpt_tr_for_" + estpgt_id).remove();
    }
}

вы можете передать его при вызове функции. или другой способ - вы можете установить значение в скрытом поле при вызове первой функции, а в вызове функции раздела вы можете получить значение из скрытого поля.

Jalpesh Patel 21.05.2018 08:04

Почему бы не использовать закрытие должным образом и не определить ваши функции и переменную в рамках этого замыкания? Конечно, если вы можете выбрать, где определять свои функции ... В противном случае у вас нет другого правильного способа, кроме как передать его в качестве параметра.

sjahan 21.05.2018 08:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вызовите вторую функцию внутри первой и передайте переменную в качестве аргумента:

function delete_estimate_position_type() { 
   save_configuration(styep_id)
}

function save_configuration(id){
   request_url = "/service_type_est_positions/" + id + "/destroy_from_service_type_config";
}

Всего 1 проблема. Функцию save_configuration следует использовать только при нажатии кнопки "сохранить", но теперь ее "продублировали" и использовали также функциональную кнопку delete_estimate_position_type.

user6158284 21.05.2018 08:22

Используется глобальная переменная области видимости, чтобы проверить, была ли функция выполнена, но затем при сохранении я получаю эту ошибку - prntscr.com/jkiemg

user6158284 21.05.2018 08:34

Вы можете использовать это так

 function delete_estimate_position_type() {
        var estpt_tr_jqobj, estpt_action_links_td_jqobj, styep_id, authenticity_token, request_url, stya_id;

        styep_id = $(this).attr("styep_id");

       // your other code goes here.....
       // Your variable pass as argument
            remove_estpgt_if_has_no_estpt($(this).attr("estpgt_id"),styep_id.val() );
        }
}

// Получаем из аргумента.

function remove_estpgt_if_has_no_estpt(estpgt_id,styep_id ) {
    // Paskatīsimies vai eksistē kāda tāmes pozīcija
    if ($("#estpt_for_" + estpgt_id + ">tr:first").size() == 0) {
        $("#estpgt_" + estpgt_id).remove();
        $("#estpt_tr_for_" + estpgt_id).remove();
    }
}

Другой вариант - в скрытом поле.

// HTML

<input type = "hidden" id = "styep_id_newval" value = "">

// Конец HTML

function delete_estimate_position_type() {
        var estpt_tr_jqobj, estpt_action_links_td_jqobj, styep_id, authenticity_token, request_url, stya_id;

        styep_id = $(this).attr("styep_id");

       // your other code goes here.....
       $("#styep_id_newval").(styep_id.val());

       // Your variable pass as argument
            remove_estpgt_if_has_no_estpt($(this).attr("estpgt_id"),styep_id.val() );
        }
}

Теперь вы можете легко получить доступ к коду из любого места.

$("styep_id_newval").val(); 

Если я делаю то, что вы сказали - я получаю этот тип ошибки - prntscr.com/jkiemg Но я не могу использовать второй метод, потому что веб-сервис находится на Ruby и не мной, поэтому есть другая структура.

user6158284 21.05.2018 08:29

@ ВикторБайкер, не могли бы вы попробовать styep_id.val (), так как я передаю аргумент. remove_estpgt_if_has_no_estpt ($ (this) .attr ("estpgt_id"), stye‌ p_id.val ());

Jalpesh Patel 21.05.2018 08:33

У вас проблема в $("#styep_id_newval").(styep_id );, должен быть идентификатор.

user6158284 21.05.2018 08:43

@ ВикторБайкер вы используете первое решение на втором? Также я загрузил второй код решения

Jalpesh Patel 21.05.2018 08:48

Другие вопросы по теме