Javascript 将jQuery单击事件与现有对象混合使用';s onclick属性

Javascript 将jQuery单击事件与现有对象混合使用';s onclick属性,javascript,jquery,onclick,Javascript,Jquery,Onclick,我使用jQuery,但处理JSF页面生成的标记。很多元素都有JSF代码提供的onclick属性(这不是我的领域) 例如: <div onclick="[jsf js to submit form and go to next page]">submit</div> 是否有处理此问题的最佳实践 我的一个想法是,在页面加载时,获取onclick属性的值,从对象中删除onclick属性,然后……嗯,这就是我丢失的地方。我可以将JS缓存为数据属性中的文本,但我不确定以后如何启动

我使用jQuery,但处理JSF页面生成的标记。很多元素都有JSF代码提供的onclick属性(这不是我的领域)

例如:

<div onclick="[jsf js to submit form and go to next page]">submit</div>
是否有处理此问题的最佳实践

我的一个想法是,在页面加载时,获取onclick属性的值,从对象中删除onclick属性,然后……嗯,这就是我丢失的地方。我可以将JS缓存为数据属性中的文本,但我不确定以后如何启动它

编辑

您可以保存原始事件:

var originalEvent = $('div').attr("onclick");
$('div').attr("onclick", false);

$('div').click(function(e) {
        if (false) {
            // do nothing and let the JS in the onlick attribute do its thing

            eval(originalEvent);
        }
        else {
            alert("error");
            // somehow stop the onclick attribute JS from firing
        }

    });
看看这个


将if(false)更改为if(true)以查看表单有效时的hepens值。

只要使用
eval
在jQuery单击事件中运行onclick属性代码(如果需要)。您需要删除
onclick
属性

<div onclick="alert('hi');">submit</div>

返回false或使用:

e.stopPropagation()

根据您的需要。

我喜欢e.stopProgation()和e.preventDefault(),但如果您不喜欢这种策略,也可以手动删除onclick()属性,并在成功验证后手动调用它使用的函数


不同的笔划..

为什么你不能做如下事情:

div=document.getElementById('test');
oldClick=div.onclick;
bol=false;
div.onclick=function(){
    if(bol){
        oldClick();
    }
    else {
       alert('YOU SHALL NOT RUN INLINE JAVASCRIPT'); 
   }
}

内联onclick属性JS似乎在任何绑定的jQuery事件处理程序之前触发。因此,我认为解决方案的一部分是,我需要在页面加载时完全去掉onclick attr,这样它就不存在了。这里,如果我没记错的话,是
return false
阻止了事件冒泡(请澄清).我已经更改了基于jsfiddle的答案。问题是onclick JS将在任何绑定jQuery事件之前触发。示例:查看更新的解决方案,我认为这可能不起作用,因为这里并没有可以取消的内联事件传播。技巧是用$('div').attr(“onclick”,false)表示的;这将删除内联事件,以便您可以在需要时调用它。但我根本不想运行它。已编辑,请查看。当您通过jQuery绑定事件时,它不会运行onclick代码。如果您使用DefaultEdited,请看一看,您需要删除onclick。您确定吗?这里有一个示例,至少在Firefox中,似乎表明在任何绑定jQuery事件之前onclicks fire:啊!对不起,我在看到你的补遗之前就发布了。是的,我想那可能有用。现在就开始尝试……这会获得很多支持票,但就其本身而言,似乎并不是一个解决方案,因为onclick事件在任何绑定jquery事件运行之前触发。换句话说,onclick在我告诉它默认值之前就启动了
e.stopPropagation()
e.preventDefault()
div=document.getElementById('test');
oldClick=div.onclick;
bol=false;
div.onclick=function(){
    if(bol){
        oldClick();
    }
    else {
       alert('YOU SHALL NOT RUN INLINE JAVASCRIPT'); 
   }
}