我在类型为checkbox的输入标记中有一个onchange事件,它调用javascript函数并将三个参数从模型传递给函数:
<input type="checkbox" ... onchange="changeRow('@Model.Id', '@Model.Type', @Model.AwaitingApproval)" ...
在changeRow javascript函数中,前两个值被正确报告,但第三个参数(boolean类型)是对onchange函数的引用。检查值时,我可以看到onchange函数签名,并声明它是一个函数。
这是一个带有一些jquery的普通MVC应用程序,数据通过来自通过Model提供数据的控制器的ajax调用进行通信。
如果我将代码更改为以下内容:
<label>@Model.AwaitingApproval <input type="checkbox" ... onchange="changeRow('@Model.Id', '@Model.Type', @Model.AwaitingApproval)" ... </label>
然后在复选框之前的页面上打印值TRUE。因此,这证明了模型值是正确的并且可以被引用。
任何有关可能导致js函数中奇怪行为的想法都将非常感谢! (或者如果预期这种行为的解释,我不明白为什么会发生这种情况。)
Javascript功能:
function changeRow(Id, Type, AwaitingApproval)
{
if (!AwaitingApproval) (*This is where I first detected the problem*)
{
...
}
}
没有什么&#34;特别&#34;关于javascript函数,它只是接收参数,然后根据值进行处理。 Id参数具有正确的整数值,type字段具有正确的字符串值,但AwaitingApproval参数具有以下内容:
function onchange(event)
{
changeRow('7334512', 'targeted', onchange)
}
这基本上是对我首先分配给onchange事件的函数的引用,你猜对了,第三个参数的onchange是对同一个函数的另一个引用,导致了一个无限的引用循环同样的方式。
答案 0 :(得分:1)
通过更多的播放,我想通过在代码块中包含第三个参数来试一试:
$builder->add('translations', 'a2lix_translations_gedmo', array(
'translatable_class' => "Syms\PageBundle\Entity\Page"
);
然后导致存储在属性中的正确布尔值。
我根本不理解这种行为,如果有人能够对此有所了解,我会很高兴。
Stephen Muecke建议的清洁方式
onchange="changeRow('@Model.Id', '@Model.Type', '@{ @Model.AwaitingApproval }')"
重要的是要记住引号,然后在javascript函数中测试 string 值(&#39; True&#39; /&#39; False&#39;)。
答案 1 :(得分:0)
在您的第一个示例<input type="checkbox" ... onchange="changeRow('@Model.Id', '@Model.Type', @Model.AwaitingApproval)" ...
中,您的@Model.AwaitingApproval
参数没有''
。所以也许试试onchange="changeRow('@Model.Id', '@Model.Type', '@Model.AwaitingApproval')"