Javascript 通过.change()事件处理程序传递变量

Javascript 通过.change()事件处理程序传递变量,javascript,jquery,Javascript,Jquery,我有一些链式选择元素,如年份、品牌、型号、子型号、颜色。第一个在加载时通过getJSON调用填充: $.getJSON("http://mydomain/something.cfm?get=years", function(json) { var data = ""; $.each(json, function(i, v) { if(v.name != ""){ data = data + "<

我有一些链式选择元素,如年份、品牌、型号、子型号、颜色。第一个在加载时通过getJSON调用填充:

$.getJSON("http://mydomain/something.cfm?get=years",
    function(json) {
        var data = "";
        $.each(json, function(i, v) {
            if(v.name != ""){
                data = data + "<option value='" + v.value + "'>" + v.name + "</option>";
            }
        });
        $(wheelBuilder.YEARS).html(data).removeAttr("disabled");
        if(getUrlVars()["year"] != undefined){
            $(wheelBuilder.YEARS).val(getUrlVars()["year"]);
            $(wheelBuilder.YEARS).change();
        }
    }
);
$.getJSON(“http://mydomain/something.cfm?get=years",
函数(json){
var数据=”;
$.each(json,函数(i,v){
如果(v.name!=“”){
数据=数据+“”+v.name+“”;
}
});
$(wheelBuilder.YEARS).html(data.removeAttr(“禁用”);
如果(getUrlVars()[“年”!=未定义){
$(wheelBuilder.YEARS).val(getUrlVars()[“year]”);
$(wheelBuilder.YEARS).change();
}
}
);
当用户选择项目时,将填充后续的选择元素。.change()函数进行.getJSON()调用,以获取用于填充每个后续select元素的数据。函数的作用是:按名称从查询字符串中获取变量。如果可用,则必须预先选择每个“选择”元素。为了进行此预选,必须调用.change()函数,以便填充下一个元素

问题是,我只需要在从onload调用这些.change()函数时,而不是在用户手动进行更改时,才需要在这些函数中运行代码。我注意到jquery文档为.change()函数提供了一个.change([eventData],handler)选项,但我不确定这是否会起作用或者如何使用它(没有提供示例)

谢谢


TLDR:基本上,我试图找到一种方法来区分代码选择选择选项的时间和人类选择选择选择选项的时间

有很多方法可以做到这一点,但是如果您使用jquery,那么最简单的方法可能是检查事件的来源

下面是一个让您开始的提示:

控制台中的第一个事件是由jQuery触发的事件。如果手动更改组合框,您将获得第二个事件。以下是我可以看到的一些差异:

  • jQuery触发的事件包含“isTriggered”属性(请参阅:)我可能会使用这个来确定事件是否是内部触发的
  • 用户触发的事件包含一系列额外的属性,例如:“originalEvent”、“bubbles”、“cancelable”等
var onChange = function(evnt) {
    console.log("Changed: ", arguments)
}

var $select = $("#mySelect");
$select.change(onChange);

// Manually trigger the change event
$select.change();