在实际检查任何内容之前,运行决定是否检查复选框/收音机的代码(javascript)

在实际检查任何内容之前,运行决定是否检查复选框/收音机的代码(javascript),javascript,checkbox,radio-button,preventdefault,Javascript,Checkbox,Radio Button,Preventdefault,我正在用Javascript和jQuery构建一个购物车应用程序,每当点击一个产品时,它都需要运行一些逻辑。单击的元素是单选按钮和复选框,代码将检查是否满足将产品添加到购物车的正确条件 我最初尝试这样做的方法是在函数开始时运行preventDefault(),运行一些逻辑来决定是否可以添加项目,如果可以,将其添加到购物车并检查输入元素 看起来有点像这样: $(document).on("click","[data-item]", function(event) { cart.update

我正在用Javascript和jQuery构建一个购物车应用程序,每当点击一个产品时,它都需要运行一些逻辑。单击的元素是单选按钮和复选框,代码将检查是否满足将产品添加到购物车的正确条件

我最初尝试这样做的方法是在函数开始时运行
preventDefault()
,运行一些逻辑来决定是否可以添加项目,如果可以,将其添加到购物车并检查输入元素

看起来有点像这样:

$(document).on("click","[data-item]", function(event) {
    cart.updateCart(this, event);
});

cart.updateCart = function(target, event) {
    if (event) {
        event.preventDefault();
    }
    // pseudo code...
    if (conditionIsMet === true) {
        cart.addItem(target);
    }
}

cart.addItem = function(item) {           
    products.push(item);
    var element = $('[value=' + item.key + ']');
    element.prop('checked', true);
};
我的问题是,我似乎不能使用
元素.prop('checked',true)在我的addItem函数中,因为preventDefault停止该操作


我可以绕开这个问题吗?或者我应该通过什么途径来获得我想要的功能?我真的不想阻止表单元素被选中,而只想通过我的应用程序选中或取消选中。

似乎不可能在对复选框调用
preventDefault
之后立即设置复选框的
checked
属性。尝试用包装您的
prop
调用,这将确保
checked
属性的更新在事件循环的另一轮中发生:

$(“#cb”)。在(“单击”)上,函数(事件){
updateCart(此事件);
});
const updateCart=函数(目标、事件){
如果(事件){
event.preventDefault();
}
//伪代码。。。
如果(真===真){
附加项(目标);
}
}
const addItem=函数(项){
setTimeout(函数(){
$('cb').prop('checked',true);
})
};


我认为你的
元素
指的不是正确的元素。Yashika Garg,它是正确的元素。DOM中需要检查的元素是值等于item.key的元素。如果我使用console.log(元素);输出正确的元素。更重要的是,我可以在控制台中对该元素执行prop.checked部分,这样就可以了。这就是为什么我认为是preventDefault()部分在我的代码中阻止了它。谢谢。你能解释一下这个密码吗?这是怎么回事?箭头的作用是什么?对不起,箭头只是在ES6中编写函数的一种简写方式。我改了密码。我还将尝试对我的答案添加一点解释!啊。我还不太熟悉ES6,也不想考虑使用ES6可能引起的兼容性问题。如果您愿意,请添加该解释:)完成!如果你不必支持IE,那么现在的兼容性非常好——有时间试试吧,没有它我就活不下去了;)谢谢是的,我只是还没有达到这一点,仍然在学习很多基础知识,但我会很快检查它。您的解决方案似乎在我的代码中正常工作,所以非常感谢!