从select选项调用js函数

时间:2014-01-29 14:34:00

标签: javascript html

在html页面

<form>
            <select id="selectWork" onchange='getWorkLocation(this.value);' class="span6">
                <option value="All">Hepsi</option>
                <option value="C">Ç</option>
                <option value="E">E</option>
                <option value="H">H</option>
                <option value="K">K</option>
                <option value="K">K</option>
                <option value="M">M</option>
                <option value="T">T</option>
            </select>
</form>
<script type="text/javascript">
$(function () {
    require(["webRequest"], function (webRequest) {
function getWorkLocation(a) {
            if (a == "Hepsi") {
                getWorks();
            }
            else {
                webRequest.get("api/Work/GetWorkByType", { "type": a },
                    self.getWorkLocationSucceeded);
            }
        }

我正在尝试调用getWorkLocation函数,但我收到此错误:getWorkLocation is undefined.出了什么问题?

2 个答案:

答案 0 :(得分:0)

当您正在使用jQuery时($(function () { ... })是jQuery语法),您可以完全删除onchange属性,而是使用:

$('form').on('change', '#selectWork', function() {
    var text = $(this).text(); // "Hepsi" if A is selected

    if (text === "Hepsi")
        ...
});

如果您不熟悉图书馆,请查看http://try.jquery.comhttp://learn.jquery.com

答案 1 :(得分:0)

将getWorkLocation的定义移动到全局范围。

require(["webRequest"], function (webRequest) {
    function getWorkLocation(a) {
        if (a == "Hepsi") {
            getWorks();
        }
        else {
            webRequest.get("api/Work/GetWorkByType", { "type": a },
                self.getWorkLocationSucceeded);
        }
    }

    // make getWorkLocation publically available
    window.getWorkLocation = getWorkLocation;
});

因为看起来你正在使用require.js,所以不需要在jQuery domready事件处理程序中定义该函数。

尽管如此,你还有竞争条件。在require.js有机会下载脚本并执行回调之前,onchange事件可能会在选择框中触发。

借用James Donnelly的回答,从select标签中删除内联onchange属性并使用jQuery:

require(["webRequest"], function (webRequest) {
    ...
});

$(function() {
    $(document).on('change', '#selectWork', function() {
        getWorkLocation(this.value);
    });
});