TOGOUTECH

javascript - 两个相互依赖的字段的 knockout validation

coder 2025-02-18 原文

考虑以下代码 -

var MyObjectModel = function(myObject){
var self = this;
self.myNumber1 = ko.observable(myObject.number1).trimmed();
self.myNumber2 = ko.observable(myObject.number2).trimmed();

我想扩展 myNumber1 和 myNumber2,以添加 knockout validation ,以便在两者均为空时抛出错误,并在其中一个有值时保持正常。

知道如何实现这一目标吗?

最佳答案

您可以使用 ko.computed 创建一个函数,该函数检查是否至少设置了两个字段中的任何一个,并且在验证中有条件地执行验证。

var MyObjectModel = function (myObject) {
    var self = this;
    self.myNumber1 = ko.observable(myObject.number1);
    self.myNumber2 = ko.observable(myObject.number2);

    self.numbersHaveNoValue = ko.computed(function () {
        var value1 = self.myNumber1(), value2 = self.myNumber2();
        return !ko.validation.rules.required.validator(value1, true) &&
               !ko.validation.rules.required.validator(value2, true);
    });

    self.myNumber1.extend({ required: { onlyIf: self.numbersHaveNoValue }});
    self.myNumber2.extend({ required: { onlyIf: self.numbersHaveNoValue }});
}

我创建了一个 fiddle :http://jsfiddle.net/delixfe/aBytt/

关于javascript - 两个相互依赖的字段的 knockout validation ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14331948/

有关javascript - 两个相互依赖的字段的 knockout validation的更多相关文章

  1. javascript - 如何使用 javascript 从包含 html 代码的变量中获取选定的 div 部分? - 2

    我有一个变量var'html',它包含一些html代码。其中有一个ID为messages的div。我只想使用javascript将“html”变量中的那个div内容放入另一个变量中。请帮忙。. 最佳答案 在我看来,使用jQuery最简单的方法:varmessage=$('').append(html).find('#message').text();//.html(); 关于javascript-如何使用javascript从包含html代码的变量中获取选定的div部分?,我们在Stac

  2. javascript - 使用 phonegap 创建移动聊天应用程序 - 最佳策略? - 2

    我是否创建了一个计时器来每隔一段时间发出ajax请求以检查新消息?这似乎会消耗大量手机资源。创建简单的PhoneGap即时消息/聊天应用程序的最佳方法是什么?对于移动设备,HTTP流式传输是否可行?如果连接中断怎么办?它适用于3G吗?显然这是一个大问题,但我们将不胜感激。 最佳答案 这个问题的范围有点高,很多内容会进入“总答案”。这取决于您使用的是什么,但您是否考虑过使用node.js和websockets?我知道还有其他方法可以做服务器端websockets但这是一种流行的方法。如果您不熟悉网络套接字,它是一种新的HTML5技术,

  3. javascript - 如何生成包含可动态添加和删除行的表格的 Div? - 添加了 JSfiddle - 2

    在JSFiddle中,我尝试使用javascript动态生成div。这些div将包含表格,其中最后两行可以使用添加按钮递增。我试过fiddle中的代码。ins_row()函数用于在表格中添加在div中生成的行。addEvent()函数用于生成div当单击“添加产品”按钮时,将生成一个包含一行表格的div。当点击添加按钮时,最后两行应该根据点击次数继续添加。如果直接点击div的删除按钮,则应删除整个表格和div。当直接点击生成行的删除按钮时,应该只删除该行而不是整个div。问题这里的问题是正在生成带表格的div,但我不知道如何在表格中添加行。Seeitinactionhere预期输出注意

  4. JavaScript String 对象在 jQuery.post 上被拆分成一个数组 - 2

    我正在使用jQuery执行ajax调用-其中许多都工作正常,但我在尝试向服务器发送字符串时遇到了一个奇怪的问题。我已将代码缩小为:varx=newString('updateGroup');vary='updateGroup';$.post('page.aspx',{f:x,f2:y},function(data){});然而,当它到达服务器时,请求变量如下:Request["f"]nullstringRequest["f2"]"updateGroup"stringRequest.Form.AllKeys{string[12]}string[][0]"f[0]"string[1]"f[

  5. javascript - 如何让 SignalR 与 RequireJS 一起工作? - 2

    将SignalR与集线器一起使用时,您需要包含一个src为“/signalr/hubs”的脚本-即没有.js扩展名。当我尝试将其与RequireJS一起使用时,它坚持添加“.js”扩展名,这意味着永远不会加载集线器代理。有什么想法可以阻止它这样做吗? 最佳答案 为了他人的利益回答我自己的问题:我找到了RequireJS的“noext”插件here这解决了问题。如该页面所述,这与Issue18有关的RequireJS 关于javascript-如何让SignalR与RequireJS一起工

  6. javascript - Flash 运行时在使用 PLupload 的 IE8 中不起作用 - 2

    我在$(function(){...});正文中有简单的javascript函数varuploader=newplupload.Uploader({runtimes:'html5,flash,silverlight',browse_button:'pickfiles',container:'uploader',max_file_size:'20mb',unique_names:true,multiple_queues:false,//drop_element:'dropzone',url:'/Home/Upload',flash_swf_url:'../../../Scripts/up

  7. 基于本地时钟的 Javascript 事件触发器 - 2

    我有一个场景,其中一台客户端PC将驱动多个LCD显示器,每个显示器显示一个浏览器窗口。这些浏览器窗口使用jquery显示动画循环中的不同数据。我需要确保两个浏览器可以同步旋转以完全同时旋转,否则它们将在不同时间显示动画。所以我的问题是-我可以触发jquery以根据本地PC时钟交替显示内容吗?例如每次时钟秒==0,显示版本1,每次时钟秒==30,显示版本2等等? 最佳答案 这是(根据我的经验)让计时器尽可能接近时钟时间触发的最精确方法://getcurrenttimeinmsecstonearest30secondsvarmsecs=

  8. javascript - 获取 OS Win 7 用户名 Javascript - 2

    是否可以在浏览器IE、Chrome、Firefox、Opera中使用Javascript获取Windows用户名和PCName? 最佳答案 没有。此类信息不会暴露给浏览器中的javascript引擎。 关于javascript-获取OSWin7用户名Javascript,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8802602/

  9. c# - 我怎样才能让一个禁用的控件重新启用使用 Javascript - 2

    我已经编写了一个代码来在用户单击控件时禁用控件。在我的表单上,我有一个TextBox和一个DropDown。当用户单击TextBox时,我将禁用DropDown就像单击DropDown时一样,我将禁用TextBox效果很好。但是当用户点击Disabled控件时,我想启用该控件。意味着如果我点击被禁用的TextBox我想像dropdown一样Enable..我的示例脚本如下functiontoggleDropDownList1(){vard=document.getElementById("");if(d.disabled){d.disabled=false;}else{document

  10. javascript - 如何像 jsfiddle.net 那样调整多个相邻文本区域的大小? - 2

    如何像jsfiddle.net网站一样,通过在区域1、2、3上拖动鼠标来调整textarea的大小?我的代码是:HTML:ABCDJS:$(function(){window.onresize=resize;resize();});functionresize(){varh=(window.innerHeight||(window.document.documentElement.clientHeight||window.document.body.clientHeight));vardivHight=20+$("#div_left").height();//20=bodypaddin

随机推荐