我有一个2个jQuery脚本 – 一个在我添加.preventDefault之前,另一个在我添加了.preventDefault后的同一个脚本的副本. jQuery在初始化中工作,但是在添加.preventDefault()之后,
初始脚本工作
$(window).load(function(){ $(document).ready(function(){ $("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each if ($(this).text() == "Yes") { //test value returned from non-input field clearID(); $("tr.anon").hide(); } else { $("tr.anon").show(); } }); if ($("select[title='action']").val() == "") { $("tr.actDet").hide(); } $("select[title='organizationalElement']").focusout(function() { if ($(this).val() === "I don\'t know") { alert("If no organizational element is selected,additional time may be required to route this request"); } // close if $("select[title='action']").change(function(){ $(".actDet").toggle($(this).val()!= ""); }); // close action.change });//close select.focusout }); // close doc.ready }); // close window.load
脚本不起作用
$(window).load(function(){ $(document).ready(function(){ $("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each if ($(this).text() == "Yes") { //test value returned from non-input field clearID(); $("tr.anon").hide(); } else { $("tr.anon").show(); } }); if ($("select[title='action']").val() == "") { $("tr.actDet").hide(); } $("select[title='organizationalElement']").focusout(function() { if ($(this).val() !== "I don\'t know") { $(this).preventDefault(); } else { alert("If no organizational element is selected,additional time may be required to route this request"); } // close if $("select[title='action']").change(function(){ $(".actDet").toggle($(this).val()!= ""); }); // close action.change });//close select.focusout-- close edit record stuff }); // close doc.ready }); // close window.load
我所做的唯一变化是初始if语句成为一个if / else,调用.preventDefault().第一个脚本效果很好,但第二个脚本失败.为什么?如果organizationElement的值为现有记录上的idk,我正在调用.preventDefault()方法.
@Andrew:澄清你的编辑…我应该修改我的脚本:
…
if ($(this).val() !== "I don\'t know") { $(this).click( function(e) { e.preventDefault(); } ); } else { alert("If no organizational element is selected,additional time may be required to route this request"); } // close if
…
b / c我注意到,如果我更改$(this).preventDefault();它将正常工作.到e.preventDefault();
解决方法
你想在事件对象上调用preventDefault,而不是这样
$("select[title='organizationalElement']").focusout(function(e) { if ($(this).val() !== "I don\'t know") { e.preventDefault(); } });
只是为了完整性,请注意,preventDefault会阻止该元素的默认操作 – 将页面导航到锚点的href属性的值,例如(我不知道select的focusout的默认操作是什么,或者如果有甚至是一个). preventDefault不会阻止冒泡.
如果你碰巧关心冒泡 – 而且我不是说你一定要从jQuery事件处理程序返回false都会阻止默认动作,也可以防止冒泡.