在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.
出了什么问题?
答案 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.com和http://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);
});
});