Переменная не обновляется в строке скрипта, но обновляется - PullRequest
2 голосов
/ 16 мая 2011

Очень смущен здесь.

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

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

Теоретически это так.

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

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

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

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

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

На часть поискового скрипта на моей странице (фрагмент скрипта):

script:"/profiel/search_richting?json=true&limit=6&id=" + school_id + "&"

Как видите, я передаю переменную school_id скрипту здесь. Тем не менее, кажется, что всегда передает '1', переменную по умолчанию при загрузке страницы. Он просто игнорирует обновленную переменную. Эта строка анализируется при загрузке страницы? Другими словами, как только страница загружается, на самом деле она говорит &id=1? Это единственная идея, которую я могу придумать, почему она всегда проходит «1».

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

EDIT

Обновлено по запросу. Я добавил функцию 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=true&limit=6&",
        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=true&limit=6&id=" + school_id + "&";
}   

   </script>

Ответы [ 3 ]

0 голосов
/ 16 мая 2011

Разве вы не объединяете script:"/profiel/search_richting?json=true&limit=6&id=" + school_id + "&" до того, как событие будет запущено, а переменная обновлена?

0 голосов
/ 16 мая 2011

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

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

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

0 голосов
/ 16 мая 2011

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

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

$("#school").blur(function()    {
   school_id = $("#school_id").val();
   // update URL here ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...