如果我自己创建click事件及其处理程序,那么在正确的位置执行event.preventdefault()就没有问题。但是如果有一个已经注册了点击事件和相应处理程序的元素,我想在某种情况下停用它的进一步工作(例如提交)。
这是一个例子:
页面上有一个提交按钮,其中包含已注册的点击元素(可能大约有一百个验证例程......)和一个具有特定值的变量(al)。是此变量的瞬时值= 5(这不是所需的特定情况 - >值> 3)。
HTML
// other form elements
<input type="submit" name="next" value="go"/>
使用jQuery的JavaScript
var al = 3;
$("input[type='submit'][name='next']").click(
function(event) {
if (al != 3) {
alert (al+': Not OK');
event.preventDefault();
} else {
alert ('OK');
}
}
);
在此示例中,我无法阻止正在提交表单。我的错是什么?
编辑:event.preventDefault不是问题,sublime(我的编辑)无论如何纠正它。
-----我想简化问题---------
这是一个SubmitButon(这次是从原始上下文中的yii开始):
查看
echo CHtml::submitButton(
Yii::t ('Somethin', 'next'),
array(
'name' => 'next',
'onclick' => "checkDetails()"
));
JS
checkDetails() {
PREVENT_SUBMITTING
}
PREVENT_SUBMITTING应该怎么样?在这种情况下,什么会阻止提交,没有任何条件?
答案 0 :(得分:2)
更改
event.preventdefault();
到
event.preventDefault();
你必须把“D”写成大写字母。
答案 1 :(得分:1)
你可以这两种方式
$("input[type='submit'][name='next']").click(
function(event) {
if (al != 3) {
alert (al+': Not OK');
event.preventDefault();
} else {
alert ('OK');
}
}
);
或
$("input[type='submit'][name='next']").click(
function(event) {
if (al != 3) {
alert (al+': Not OK');
return false;
} else {
alert ('OK');
return true;
}
}
);
答案 2 :(得分:1)
现在我有了一个有效的解决方案:
查看强>
echo PHtml::submitButton(Yii::t('Something', 'next'),
array(
'name' => 'next',
'onclick' => "return checkDetails(event)",
)
);
<强>的jQuery 强>
function checkDetails (event) {
event.preventDefault();
event.returnValue =false; // for IE
return false;
}
答案 3 :(得分:0)
$("input[type='submit'][name='next']").click(
function(event) {
if (al != 3) {
alert (al+': Not OK');
event.preventDefault();
} else {
alert ('OK');
}
}
);
答案 4 :(得分:0)
尝试此更改event.preventDefault();
$("input[type='submit'][name='next']").click(
function(event) {
if (al != 3) {
alert (al+': Not OK');
event.preventDefault();
} else {
alert ('OK');
}
}
);
答案 5 :(得分:0)
我最近需要使用.off()
代替.preventDefault()
。我需要拦截并阻止一个事件处理程序,同时仍然允许主要点击事件冒泡。可能是你需要的。
答案 6 :(得分:0)
除了这个问题,我建议你将验证部分e分开。克
添加其他表单输入,例如proceed
<input type="hidden" name="proceed" value="0"/>
<input type="submit" name="next" value="go"/>
添加自定义验证方法
jQuery.validator.addMethod("validateSteps", function(value, element) {
return value == 3 ? false : true;
}, "*");
向表单添加验证规则
$("#your_form_id").validate({
rules: {
"proceed": {
validateSteps: true
}
},
messages: {
"proceed": {
validateSteps: "custom message"
}
}
});
您必须先为proceed
输入字段设置正确的值。这样您就不需要涉及事件问题了。而且它更具可定制性,例如,如果您在每个步骤中有十个步骤具有不同的验证要求