Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在单击敲除之前运行一些代码_Javascript_Knockout.js - Fatal编程技术网

Javascript 在单击敲除之前运行一些代码

Javascript 在单击敲除之前运行一些代码,javascript,knockout.js,Javascript,Knockout.js,div中有一个数据绑定onClick,如下所示: data-bind='click: $root.addTable' 是否可以在调用单击之前运行一些javascript?如果满足某个条件,是否可以不调用单击 大概是 <div id="onThisClick" data-bind='click: $root.addTable'></div> $("#onThisClick").delegate("#all", "click", function() { if(isTru

div中有一个数据绑定onClick,如下所示:

data-bind='click: $root.addTable'
是否可以在调用单击之前运行一些javascript?如果满足某个条件,是否可以不调用单击

大概是

<div id="onThisClick" data-bind='click: $root.addTable'></div>

$("#onThisClick").delegate("#all", "click", function() {
if(isTrue){
}
else {
 //run data binding as normal
}
}

$(“#onsticlick”).delegate(“#all”,“click”,function(){
如果(是真的){
}
否则{
//正常运行数据绑定
}
}

我正在执行一些验证,需要向调用的javascript函数传递一个值。

我听说过knockoutJS,我很想了解它,但在这个例子中,它对您没有任何好处。另一方面,JQuery:

$(function() {
    $root = $("#root");
    $root.addTable = function() {
        $root.html("Hooray!");
    };

    $("#onThisClick").on("click", function() {
       $root.html("");
       if($("#theText").val().match(/sad/)){
           alert("Must not be sad to see table!");
       }
       else {
          $root.addTable();
       }
   });

});

似乎工作正常。您需要传递到
addTable()
的任何值都可以使用其他HTML5
数据属性访问,没有问题。

为什么不在调用的方法中进行检查

<div class="button" data-bind="click: $root.addTable">Click</div>

// in javascript
function RootViewModel() {
    this.addTable = function() {
        if(!condition) {
            return; 
        }
        // jumps out when a condition is met

        // do what you're supposed to do here
    }
}

你可以玩转这个想法。

我假设你的问题是调用了
$root
中定义的函数,但你想访问
$data
的属性(绑定时的视图模型)。Knockout使用
apply()调用绑定函数
方法,并将当前视图模型作为第一个参数传递。因此,您的
$data
在函数中作为
this
可用(当通过单击事件调用时)。

我认为您尝试的不可能。为什么您不能在“单击”时调用的函数中执行逻辑调用了吗?@Rune-Vejen-Petersenquestion@Gabe我更新了问题+1,这就是我在“单击”中调用的函数中调用逻辑的意思@Spoike该条件依赖于html文件中的javascript变量。条件代码本身在一个单独的文件中。这就是为什么我试图在调用条件之前调用该条件,因为我似乎不知道如何将变量值从html文件传递到javascript文件。@user470184不太确定您的值是如何存储在其中的html文件,但我更新了一个隐藏的表单输入字段。还制作了一个JSFIDLE来演示这一点-1。您的回答完全回避了在点击前做某件事的问题。对问题抛出jQuery并不是一个一刀切的解决方案。您甚至在开始之前指出您不知道自己在说什么!而且,不是击倒不“做任何好事”,而是那些试图做一些毫无意义的事情的人。
<input type="hidden" id="myvalue" value="true"></input>

// in javascript code, select the element by it's id
if ($("#myvalue").val()) return;

// plain vanilla JS is a bit more verbose
if (document.getElementById("myvalue").value === "true") return;