使用jQuery在链接上调用内联JavaScript

使用jQuery在链接上调用内联JavaScript,javascript,jquery,Javascript,Jquery,我正在修改一个古老的表,该表以。桌子的外观应该不重要。TL;DR:当我点击其中一个彩色div时,我希望它的内部警报执行,我该怎么做 编辑。而且,链接实际上是隐藏的 编辑2。而且,就目前而言,所有HTML都不应该被篡改。只有jQuery/JavaScript 编辑3。我已更新脚本以使用我的表。内部现在不需要了,我可以直接选择。现在我想知道我是否正确使用了stopPropagation 代码: 只需将js放在函数中 function clikEvent(ele) { //<lots of s

我正在修改一个古老的表,该表以。桌子的外观应该不重要。TL;DR:当我点击其中一个彩色div时,我希望它的内部警报执行,我该怎么做

编辑。而且,链接实际上是隐藏的

编辑2。而且,就目前而言,所有HTML都不应该被篡改。只有jQuery/JavaScript

编辑3。我已更新脚本以使用我的表。内部现在不需要了,我可以直接选择。现在我想知道我是否正确使用了stopPropagation

代码:


只需将js放在函数中

function clikEvent(ele)
{
 //<lots of shit>
}
并在onclick上调用它,并用void-like替换href-js

<a  href="javascript:void(0)" onClick='clikEvent(this)'> 
您还必须注意传递的数据,我已放置参数ele wich将指向href,以便您可以检索id或任何其他内容 如果您想使用jQuery

$('#idofAtag').click(function(){//<lots of shit>});

只需将js放在函数中

function clikEvent(ele)
{
 //<lots of shit>
}
并在onclick上调用它,并用void-like替换href-js

<a  href="javascript:void(0)" onClick='clikEvent(this)'> 
您还必须注意传递的数据,我已放置参数ele wich将指向href,以便您可以检索id或任何其他内容 如果您想使用jQuery

$('#idofAtag').click(function(){//<lots of shit>});

下面是一个使您的代码工作的快速破解。请注意,这完全不是应该怎么做的

计算href属性中的内联脚本,而不是触发单击:

旧的:

新的:


下面是一个使您的代码工作的快速破解。请注意,这完全不是应该怎么做的

计算href属性中的内联脚本,而不是触发单击:

旧的:

新的:


这里有两个问题。一个是事件传播。单击div时,会触发对链接的单击,这也是对div的单击。这将创建一个无限循环,该循环将很快超过最大调用堆栈大小。要解决这个问题,您需要做两件事:

仅当用户单击div而不是其中的a时,才执行window.location.href分配。 如果用户确实单击了a,请防止事件冒泡到div 第二个问题是链接上的“单击”事件不会执行存储在href属性中的javascript。您要做的是设置window.location.href

这里有一个演示


-注意-我强烈建议您找到另一种方法来处理这种情况,但如果您无法更改现有链接,则此选项是可行的。

这里有两个问题。一个是事件传播。单击div时,会触发对链接的单击,这也是对div的单击。这将创建一个无限循环,该循环将很快超过最大调用堆栈大小。要解决这个问题,您需要做两件事:

仅当用户单击div而不是其中的a时,才执行window.location.href分配。 如果用户确实单击了a,请防止事件冒泡到div 第二个问题是链接上的“单击”事件不会执行存储在href属性中的javascript。您要做的是设置window.location.href

这里有一个演示


-注意-我强烈建议您寻找另一种方法来处理这种情况,但如果您无法更改现有链接,则此选项是可行的。

请在您的答案中包括并解释代码。如果链接不可用,您的答案将无效。或者类似于:window.location=$this.find'.bar'.parent.attrref;嗯,这确实有效。我想我是这样做的,直到我找到一个更漂亮的方法。或者也许它足够漂亮。这个解决方案有两个问题。1评估是邪恶的。不要使用它,如果你可以避免它,你可以避免它在这里。2如果用户单击“实际”,则会触发两次警报。@jackwanders这是怎么回事?代码实际上是隐藏的,但我没有提到。请在您的答案中包括并解释代码。如果链接不可用,您的答案将无效。或者类似于:window.location=$this.find'.bar'.parent.attrref;嗯,这确实有效。我想我是这样做的,直到我找到一个更漂亮的方法。或者也许它足够漂亮。这个解决方案有两个问题。1评估是邪恶的。不要使用它,如果你可以避免它,你可以避免它在这里。2如果用户单击“实际”,则会触发两次警报。@jackwanders这是怎么回事?实际上是隐藏的,但我没有提到。是的,但这是.NET,有一大群丑陋的字符串构建,如果我触摸它,它可能会死亡。是的,但这是.NET,有一大群丑陋的字符串构建,如果我触摸它,它可能会死亡。我也会检查你的解决方案。我知道这不是最好的选择,但我可能要花一整天的时间重写难看的ASP.NET。或者一个星期,它是如此丑陋,我甚至没有经验在.NET。我会检查你的解决方案了。我知道这不是最好的选择,但我可能要花一整天的时间重写难看的ASP.NET。或者一个星期,就那么难看,而我 我甚至在.NET方面有经验。
$('.foo').on('click', function (e) {
    var link =  $(this).find('.bar').parent('a');
    if(e.target != link.get(0)) {
        window.location.href = link.attr('href');
    }
});
$('.foo').on('click', 'a', function(e) {
    e.stopPropagation();
});