将模型布尔值发送到js函数会导致onchange函数引用

时间:2015-11-25 19:33:03

标签: javascript asp.net-mvc-4

我在类型为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是对同一个函数的另一个引用,导致了一个无限的引用循环同样的方式。

2 个答案:

答案 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')"