Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JS函数绑定到razor文件中另一个脚本文件中的复选框_Javascript_Jquery_Asp.net Mvc_Razor_Onchange - Fatal编程技术网

Javascript 将JS函数绑定到razor文件中另一个脚本文件中的复选框

Javascript 将JS函数绑定到razor文件中另一个脚本文件中的复选框,javascript,jquery,asp.net-mvc,razor,onchange,Javascript,Jquery,Asp.net Mvc,Razor,Onchange,我有一个包含文本框的局部razor视图,如- @Html.EditorFor(x => x.UnitsBought, new { @onchange = "script.updateUnitPrice(this);" } ) 从主视图调用,脚本引用如下- $(document).ready(function () { let script = new UnitAllocationMaintScript(); script.initialize(); 脚本

我有一个包含文本框的局部razor视图,如-

@Html.EditorFor(x => x.UnitsBought, new { @onchange = "script.updateUnitPrice(this);" } )
从主视图调用,脚本引用如下-

$(document).ready(function () {
        let script = new UnitAllocationMaintScript();
        script.initialize();
脚本位于不同的JS文件中,如-

var UnitAllocationMaintScript = (function ($, app) {
"use strict";
var updateUnitPrice = function (element) {
....
}
但是,当我更改UnitsBuw文本框时,会出现如下错误-

脚本未定义


如何调用函数。

使用不引人注目的事件处理程序。换句话说,不要使用像
onchange
这样的HTML属性,而是:

$('#UnitsBought').on('change', function () {
    ...
});

使用不引人注目的事件处理程序。换句话说,不要使用像
onchange
这样的HTML属性,而是:

$('#UnitsBought').on('change', function () {
    ...
});

script
$(document).ready()处理程序函数中定义,因此不在
窗口下运行的
onchange
属性的范围内

要解决此问题,可以使用不引人注目的JS而不是过时的*
属性附加事件处理程序。试试这个:

@Html.EditorFor(x => x.UnitsBought, new { @class = "units-bought" } )
$(文档).ready(函数(){
让script=new UnitAllocationMaintScript();
script.initialize();
$('.units Bunded').change(函数(){
script.updateUnitPrice(此);
});
});

脚本
$(document).ready()处理程序函数中定义,因此不在
窗口下运行的
onchange
属性的范围内

要解决此问题,可以使用不引人注目的JS而不是过时的*
属性附加事件处理程序。试试这个:

@Html.EditorFor(x => x.UnitsBought, new { @class = "units-bought" } )
$(文档).ready(函数(){
让script=new UnitAllocationMaintScript();
script.initialize();
$('.units Bunded').change(函数(){
script.updateUnitPrice(此);
});
});

在$(document)之前加载外部js文件。就绪(function(){}在$(document)之前加载外部js文件。就绪(function(){}我不能使用-$('.units bunded')。更改(function(){script.updateUnitPrice(this);});为什么?考虑到您定义的位置,这几乎是代码工作的唯一方式。因为购买的单位不是在运行时生成的确切ID,因为它是一个网格项。这与我将其添加为类无关…?我还需要元素ID,我必须根据它执行一些计算。我可以吗从类更改事件中获取元素ID?我不能使用-$('.units').change(function(){script.updateUnitPrice(this);});为什么?考虑到您定义的位置,这几乎是代码工作的唯一方式。因为购买的单位不是在运行时生成的确切ID,因为它是一个网格项。这与我将其添加为类无关…?我还需要元素ID,我必须根据它执行一些计算。我可以吗从类更改事件获取元素ID?我不能使用ID选择器,因为ID是在运行时生成的。这并不重要。它不像是随机的。一旦你知道它是什么,它将永远是什么。不管怎样,你可以同样轻松地使用类或任何其他有效的CSS选择器。重点是使用jQuery
on
方法,而不是n在属性中硬编码函数名。我不能使用id选择器,因为id是在运行时生成的。这并不重要。它不像是随机的。一旦你知道它是什么,它将永远是什么。不管怎样,你可以同样轻松地使用类或任何其他有效的CSS选择器。重点是使用jQuery
on
方法,而不是而不是在属性中硬编码函数名。