zoukankan      html  css  js  c++  java
  • 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);
        });
    });
     
  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/spring_wang/p/3983191.html
Copyright © 2011-2022 走看看