变量不在脚本字符串中更新,但它会更新

时间:2011-05-15 21:38:53

标签: javascript jquery variables

非常困惑。

我有一个搜索框,可以从我的数据库中读取学校名称列表。当我选择一所学校时,id(来自数据库)被放入一个隐藏的文本框中。

我还有一个搜索框,可以从我的数据库中读取课程列表。但是,我进行了查询,以便它只读取所选学校的课程。

理论上就是这样做。

我打算将学校ID(我从隐藏的盒子中抓取)传递给搜索脚本,然后搜索脚本将其传递给我的数据库查询。但是,我把我的学校ID放入的变量似乎没有更新..但它确实如此。让我解释一下。

我来到了这个页面。我的测试帐户的学校有id 1.隐藏框中的ID号确实是1.我搜索了一所学校,我知道有一些课程分配给它:框中的ID号变为3.

我有一个名为school_id的JS变量,我在$(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'。

有没有办法在我的脚本字符串中进行此变量更新?或者解决这个问题的最佳方法是什么?像往常一样,我可能会再次错过非常简单的事情。非常感谢。

修改

根据请求更新。我按照建议添加了一个函数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 :(得分:0)

这是因为URL是静态的,不会随着ID的更改而更新。

您应该将URL更新为您编写的代码的一部分以获取ID:

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

答案 1 :(得分:0)

你是不是在事件被触发之前连接script:"/profiel/search_richting?json=true&limit=6&id=" + school_id + "&"并且var更新了?

答案 2 :(得分:0)

好。所以问题是我的第三方插件而不是我写的代码。我通过编辑autoSuggest插件的代码修复了这个问题,现在它在AJAX请求中包含了我的id字段。

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

感谢所有试图帮助我的人!