Knockout: radio选项切换引发click事件的一点总结
1.场景:如下图,当选择定期存款时,输入框右边出现红色的必输项星号,当选择活期存款时,不再出现该星号。
2.思路一:不使用knockout,直接用click事件,就可以实现这个需求,代码如下:
<html> <head> </head> <body > <input id="Radio3" name="rdoCunKuanType" data-bind="checked:CunKuanType" onclick="document.getElementById('f1').style.display = 'inline'" value="H" checked type="radio" />活期存款 <input id="Radio4" name="rdoCunKuanType" data-bind="checked:CunKuanType" onclick="document.getElementById('f1').style.display = 'none'" value="D" type="radio">定期存款 <br />定期几年:<input type="text" />年 <font id="f1" color="red">*</font> </body> </html>
3.思路二:使用Knockout的click事件及监控属性.
代码如下:
htm
<head>
<script src=
"../lib/require/require.js"
data-main=
"ko1_radio3_main"
></script>
</head>
<body >
<input id=
"Radio3"
name=
"rdoCunKuanType"
data-bind=
"checked:CunKuanType,click:RadioClick"
value=
"H"
checked type=
"radio"
/>活期存款
<input id=
"Radio4"
name=
"rdoCunKuanType"
data-bind=
"checked:CunKuanType,click:RadioClick"
value=
"D"
type=
"radio"
>定期存款
<br />定期几年:<input type=
"text"
/>年 <font data-bind=
"visible:ShowStar"
color=
"red"
>*</font>
</body>
</html>
js
require.config({
paths: {
"knockout"
:
"../lib/knockout/knockout-2.3.0"
,
"jquery"
:
"../lib/jquery/jquery-1.9.1.min"
}
});
require([
'jquery'
,
'knockout'
],
function
($, ko) {
//数据绑定
$(document).ready(
function
() {
var
viewModel = {
CunKuanType: ko.observable(
"H"
),
ShowStar: ko.observable(
false
),
//汇往国家及地区星号显示标示符
RadioClick:
function
() {
if
(viewModel.CunKuanType() ==
"D"
) {
viewModel.ShowStar(
true
);
}
else
{
viewModel.ShowStar(
false
);
}
return
true
;
}
};
ko.applyBindings(viewModel);
});
});
需要注意的是,RadioClick最后一定要返回一个true,否则click事件无效。
4.思路三:完全不用click事件,纯粹用监控依赖属性就可以搞定.
这个最符合Knockout所主张的思想了,一个属性变了,它本身并不引发操作,而是利用监控它也就订阅它的方法自动引发操作,不必再写click了,代码如下:
htm
<html>
<head>
<script src=
"../lib/require/require.js"
data-main=
"ko1_radio1_main"
></script>
</head>
<body >
<input id=
"Radio1"
name=
"rdoCunKuanType"
data-bind=
"checked:CunKuanType"
value=
"H"
checked type=
"radio"
/>活期存款
<input id=
"Radio2"
name=
"rdoCunKuanType"
data-bind=
"checked:CunKuanType"
value=
"D"
type=
"radio"
>定期存款
<br />定期几年:<input type=
"text"
/>年 <font data-bind=
"visible:ShowStar"
color=
"red"
>*</font>
</body>
</html>
js
require.config({
paths: {
"knockout"
:
"../lib/knockout/knockout-2.3.0"
,
"jquery"
:
"../lib/jquery/jquery-1.9.1.min"
}
});
require([
'jquery'
,
'knockout'
],
function
($, ko) {
//数据绑定
$(document).ready(
function
() {
var
viewModel = {
CunKuanType: ko.observable(
"H"
)
};
viewModel.ShowStar = ko.dependentObservable(
function
()
{
if
(viewModel.CunKuanType() ==
"H"
)
{
return
false
;
}
else
{
return
true
;
}
}, viewModel);
ko.applyBindings(viewModel);
});
});
作者: 王春天 出处: http://www.cnblogs.com/spring_wang/ Email: spring_best@yeah.net QQ交流:903639067
QQ群:322581894 关于作者: 大连天翼信息科技有限公司 技术总监。 SNF快速开发平台 创始人。应用平台架构师、IT规划咨询专家、业务流程设计专家。 专注于快速开发平台的开发、代码生成器。同时专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,精通DotNet系列技术Vue、.NetCore、MVC、Webapi、C#、WinForm等,DB(SqlServer、Oracle等)技术,移动端开发。熟悉Java、VB及PB开发语言。在面向对象、面向服务以及数据库领域有一定的造诣。现从事项目实施、开发、架构等工作。并从事用友软件产品U8、U9、PLM 客开工作。 如有问题或建议,请多多赐教! 本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。