Javascript 在单击敲除之前运行一些代码
div中有一个数据绑定onClick,如下所示: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
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;