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

时间:2014-07-08 00:14:41

标签: javascript jquery

我有一些年份,品牌,模型,子模型,颜色的链式选择元素。第一个在加载时填充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();
        }
    }
);

当用户选择项目时,将填充后续选择元素。 .change()函数调用.getJSON()来获取数据以填充每个后续的select元素。 getUrlVars()函数按名称从查询字符串中获取变量。如果它们可用,则必须预先选择每个选择元素。为了进行这种预选,必须调用.change()函数,以便填充下一个元素。

事情是,我需要代码在这些.change()函数内部运行时才从onload调用,而不是在用户手动进行更改时。我注意到jquery文档有.change()函数的.change([eventData],handler)选项,但是我不确定这是否可以解决这个问题或者如何使用它(没有提供示例)

感谢。

TLDR:基本上,我试图找到一种方法来区分何时通过代码从人类选择选择选项时选择选项。

1 个答案:

答案 0 :(得分:1)

你有很多方法可以做到这一点,但如果你正在使用jquery,那么最简单的事情就是检查事件是否有事件发生的迹象。

这是一个让你入门的傻瓜:http://plnkr.co/edit/wfOQgjzwijw3IlN1PlNq?p=preview

var onChange = function(evnt) {
    console.log("Changed: ", arguments)
}

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

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

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

  • jQuery触发事件包含一个&#39; isTriggered&#39;财产(见:In JavaScript, what is event.isTrigger?)。 我可能会使用此来确定事件是否在内部触发。
  • 用户触发事件包含许多额外属性,例如:&#34; originalEvent&#34;,&#34; bubbles&#34;,&#34; cancelable&#34;等。