Javascript 单击事件中的if条件后jQuery停止脚本执行

Javascript 单击事件中的if条件后jQuery停止脚本执行,javascript,jquery,Javascript,Jquery,在此表中,行仅在批准后才可选择?列为空。用户还可以在“拒绝原因”列中添加文本 单击“拒绝”按钮时,我希望确保在执行其余操作之前,在所有选定行中填写所有拒绝原因。我试图使用returnfalse,e.stopPropagation(),e.stoppimediatepropagation(),但这些都不起作用。正如您在我的示例中所看到的,alert(“test”)将始终执行。我想阻止这一切。你能帮忙吗 $(函数(){ 变量表=$(“#myDataTable”).DataTable({ 信息:错,

在此表中,行仅在批准后才可选择?列为空。用户还可以在“拒绝原因”列中添加文本

单击“拒绝”按钮时,我希望确保在执行其余操作之前,在所有选定行中填写所有拒绝原因。我试图使用
returnfalse
e.stopPropagation()
e.stoppimediatepropagation()
,但这些都不起作用。正如您在我的示例中所看到的,
alert(“test”)
将始终执行。我想阻止这一切。你能帮忙吗

$(函数(){
变量表=$(“#myDataTable”).DataTable({
信息:错,
分页:false,
搜索:假,
排序:false
});
$(“#myDataTable tbody”)。在('click','tr',function()上{
var tr=$(此).tr;
var rowText=tr.children(“td”).text();
var approveDeny=tr.children(“td:nth child(2)”).text();
如果(批准日期==“”){
$(this.toggleClass('selected');
}
});
$(“#myDataTable tbody tr td:nth child(4)”。单击(函数(e){
if($(this.prev().prev().text()=“”){
var text=$(this.text();
$(此).text(“”);
$(“”).appendTo($(this)).val(text.select().blur(function()){
var newText=$(this.val();
var parentCell=$(this.parent();
parentCell.find('textarea').remove();
table.cell(parentCell).data(newText.draw();
});
}
e、 停止传播();
});
$(“#btdeny”)。单击(函数(e){
table.cells('.selected',3).every(函数(rowIdx,tableLoop,rowLoop){
var data=this.data();
如果(数据==“”){
警报(rowIdx+“为空,您必须填充它。”);
返回false;
}
控制台日志(数据);
});        
警报(“测试”);
});
});

名称
经核准的?
日期
否认理由
米老鼠
对
1/1/2016
米妮老鼠
1/3/2016
唐老鸭
1/5/2016


对,您需要将every()的布尔输出分配给一个变量,然后仅当该变量为true时才执行警报。现在,every()调用的结果将被忽略,并且不管如何都会执行警报。比如:

var isValid = table.cells('.selected',3).every(function(rowIdx, tableLoop, rowLoop) {
    var data = this.data();
    if(data == "") {                
        alert( rowIdx + " is empty, you have to fill it.");
        return false;
    }
    console.log(data);
});
if (isValid) {
    alert("test");
}

对,您需要将every()的布尔输出分配给一个变量,然后仅当该变量为true时才执行警报。现在,every()调用的结果将被忽略,并且不管如何都会执行警报。比如:

var isValid = table.cells('.selected',3).every(function(rowIdx, tableLoop, rowLoop) {
    var data = this.data();
    if(data == "") {                
        alert( rowIdx + " is empty, you have to fill it.");
        return false;
    }
    console.log(data);
});
if (isValid) {
    alert("test");
}

您可以使用内部
.every()
函数范围之外的变量,并在该函数内对其进行更改,以便知道数据是否有效

$("#btnDeny").click(function(e) { // Outer scope function 
    var valid = true;
    table.cells('.selected',3).every(function(rowIdx, tableLoop, rowLoop) { // inner scope function     
        var data = this.data();
        if(data == "") { 
            valid = false;
            alert( rowIdx + " is empty, you have to fill it.");
        }
    });
    if (valid)
        alert("Data valid");
});

您可以使用内部
.every()
函数范围之外的变量,并在该函数内对其进行更改,以便知道数据是否有效

$("#btnDeny").click(function(e) { // Outer scope function 
    var valid = true;
    table.cells('.selected',3).every(function(rowIdx, tableLoop, rowLoop) { // inner scope function     
        var data = this.data();
        if(data == "") { 
            valid = false;
            alert( rowIdx + " is empty, you have to fill it.");
        }
    });
    if (valid)
        alert("Data valid");
});

它似乎工作得很好。警报(“测试”)将始终运行,因为它不在click函数中的.every()函数的作用域内。不确定问题是什么,你想实现什么。实际上,在你的监听器中,你有一个对每个函数的调用,每个函数都会调用你赋予它的函数。每次调用完成后,您给事件侦听器的函数将继续。您不能从给定给每个的函数内部停止click处理程序的执行。我要完成的是,我不希望在满足if条件后执行警报。它似乎工作正常。警报(“测试”)将始终运行,因为它不在click函数中的.every()函数的作用域内。不确定问题是什么,你想实现什么。实际上,在你的监听器中,你有一个对每个函数的调用,每个函数都会调用你赋予它的函数。每次调用完成后,您给事件侦听器的函数将继续。您无法从给定给每个的函数内部停止执行click处理程序。我要完成的是,我不希望在满足if条件后执行警报。当我测试它时,在console.log中isValid将我显示为对象,而不是true或false。因此,检查是不正确的。我遗漏了什么?本机javascript Array.prototype.each方法返回一个布尔值,因此如果each()调用返回的是一个对象,我猜它实际上不是本机javascript方法。有可能DataTable已经覆盖了它。在任何情况下,查看正在获取的对象内部,看看是否可以从其内容中派生“isValid”。你说得对,murdock,我必须从DataTable中获取一个javascript数组,然后我才能检查它。当我测试它时,在console.log中isValid将我显示为对象,而不是true或false。因此,检查是不正确的。我遗漏了什么?本机javascript Array.prototype.each方法返回一个布尔值,因此如果each()调用返回的是一个对象,我猜它实际上不是本机javascript方法。有可能DataTable已经覆盖了它。在任何情况下,查看您正在获取的对象内部,看看是否可以从其内容中派生“isValid”。您是对的,murdock,我必须从DataTable中获取一个javascript数组,然后我可以检查它。