Переменная не обновляется в строке скрипта, но она обновляется

#javascript #jquery #variables

#javascript #jquery #переменные

Вопрос:

Здесь очень запутано.

У меня есть окно поиска, которое считывает список названий школ из моей базы данных. Когда я выбираю школу, идентификатор (из базы данных) помещается в скрытое текстовое поле.

У меня также есть окно поиска, которое считывает список курсов из моей базы данных. Однако я сделал запрос таким образом, чтобы он считывал только курсы из выбранной школы.

Теоретически это возможно.

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

Я захожу на страницу. Школа для моей тестовой учетной записи имеет идентификатор 1. Идентификационный номер в моем скрытом поле действительно равен 1. Я ищу школу, которой, как я знаю, назначены некоторые курсы: идентификационный номер в поле меняется на 3.

У меня есть переменная JS с именем, school_id которую я объявил за пределами своего $(document).ready . Я предполагаю, что это означает, что она глобальная (это то, чему меня научили, хотя однажды SO сказал мне, что это не совсем правильный способ сделать это. Все еще нужно разобраться с этим). Я написал функцию, которая обновляет эту переменную, когда окно поиска школы теряет фокус:

     $("#school").blur(function()    {
        school_id = $("#school_id").val();
    });
  

Краткое сообщение javascript:alert(school_id); в строке моего браузера также показывает обновленную переменную: теперь она равна 3 вместо 1.

В части сценария поиска на моей странице (фрагмент сценария):

script:"/profiel/search_richting?json=trueamp;limit=6amp;id=" school_id "amp;"

Как вы можете видеть, я передаю school_id переменную скрипту здесь. Однако, похоже, происходит то, что она всегда передает ‘1’, переменную по умолчанию при загрузке страницы. Она просто игнорирует обновленную переменную. Анализируется ли эта строка при загрузке страницы? Другими словами, как только страница загружается, действительно ли она говорит amp;id=1 ? Это единственная идея, которую я могу придумать, почему она всегда будет передавать ‘1’.

Есть ли способ обновить эту переменную в строке моего скрипта? Или какой был бы лучший способ решить это? Вероятно, здесь я снова, как обычно, упускаю что-то очень простое. Большое спасибо.

Редактировать

Обновляется по запросу. Я добавил функцию getTheString, как было предложено, и я использую значение этой функции для получения URL. Все еще не работает, хотя, похоже, все еще выполняется конкатенация, прежде чем я получу возможность обновить var. ОДНАКО с этим кодом в моем журнале ajax указано id:[object HTMLInputElement] , вместо id:1 . Не уверен, что это значит.

 <script type="text/javascript">
var school_id;
$(document).ready(function()    {

    $("#school").blur(function()    {
        school_id = $("#school_id").val();
    });

    // zoekfunctie
    var scholen = {
        script:"/profiel/search_school?json=trueamp;limit=6amp;",
        varname:"input",
        json:true,
        shownoresults:false,
        maxresults:6,
        callback: function (obj) { document.getElementById('school_id').value = obj.id; }
    };
    var as_json = new bsn.AutoSuggest('school', scholen);

    var richtingen = {
        script: getTheString(),
        varname:"input",
        json:true,
        shownoresults:true,
        maxresults:6
    };
    var as_json2 = new bsn.AutoSuggest('studierichting', richtingen);

});
function getTheString() {
    return "/profiel/search_richting?json=trueamp;limit=6amp;id="   school_id   "amp;";
}   

   </script>
  

Комментарии:

1. Что случилось с людьми, удаляющими свои комментарии, пока я отвечаю на них : (

Ответ №1:

Это потому, что URL является статическим, он не обновляется при изменении идентификатора.

Вы должны обновить URL как часть кода, который вы написали, чтобы получить идентификатор:

 $("#school").blur(function()    {
   school_id = $("#school_id").val();
   // update URL here ...
});
  

Комментарии:

1. Я пробовал это, но я думаю, что проблема заключается в моем скрипте. Он принимает указанный мной URL-адрес, затем добавляет к нему динамический amp;input='' … Похоже, он просто не работает, когда я использую script: url . Думаю, мне придется обновить скрипт поиска или найти способ обойти необходимость передавать его через JS : (

Ответ №2:

Разве вы не выполняете конкатенацию script:"/profiel/search_richting?json=trueamp;limit=6amp;id=" school_id "amp;" перед запуском события и обновлением переменной?

Ответ №3:

Хорошо. Итак, проблема заключалась в моем стороннем плагине вместо кода, который я написал. Я исправил это, отредактировав код плагина autoSuggest, так что теперь он включает мое поле id в AJAX-запрос.

     var url = this.oP.script this.oP.varname "=" encodeURIComponent(this.sInp) "amp;id="  $("#school_id").val();
  

Спасибо всем, кто пытался мне помочь!