【问题标题】:Can a single script be used for two or more Anchor button clicks?单个脚本可以用于两次或多次 Anchor 按钮点击吗?
【发布时间】:2010-02-03 07:29:22
【问题描述】:

在我的页面中,有两个“Conatct Selected”锚按钮,一个在顶部的 id 为“selectAllLink”,另一个在底部的 id 为页面的“selectAllLinkB”。使用以下脚本完美运行的顶部:

<script type="text/javascript">

$(function() {
    $('#selectAllLink').each(function() {
        var a = [];
        var n = $("td.title_listing input:checked");
        var s = "";

        n.each(function() {
            a.push(this.value);
        });
        s = a.join(',');

        if (a.length > 0)
            this.href = "/D_ContactSeller.aspx?property=" + s;
        else
            this.href = 'javascript:alert("Select at least one property to contact!");';
        return false;
    });
});

现在对于我的底部锚按钮,我尝试将其 id 设置为“selectAllLinkB”并更改如下代码:

    <script type="text/javascript">

    $(function() {
        $('#selectAllLink, selectAllLinkB').each(function() {
            var a = [];
            var n = $("td.title_listing input:checked");
            var s = "";
           .....
           .....
           .....
    });

是否有任何简单的方法可以为锚按钮事件调用脚本? 等待快速而良好的响应。提前致谢...

【问题讨论】:

    标签: javascript jquery scripting button anchor


    【解决方案1】:

    你很接近。选择器应该是'#selectAllLink, #selectAllLinkB'

    但是,您可能希望使用 click 方法而不是 each 来注册单击事件,而不是在加载时设置 href 属性。现在,您将获得在页面加载时检查的复选框,而不是在单击链接时检查的复选框。

    【讨论】:

    • 这很好用...谢谢。但我还是有问题。当没有选中复选框时,它会给出 javascript 消息。单击“确定”后,它开始在页面上加载错误的 Iframe 页面。只需单击鼠标,它就会熄灭。你知道我该如何解决这个问题吗?提前谢谢..
    • @Sanju:您似乎还有一些其他代码可以加载 Iframe。查看 Justin 的代码以获取有关如何接受事件对象作为参数并使用 preventDefault 方法停止单击以使其不会触发其他任何内容的示例。
    【解决方案2】:

    您已经经历了使用不显眼的 JavaScript 来修改 href 的麻烦,甚至还有 jQuery。真的没有理由使用这种方法

    this.href = 'javascript:alert("Select at least one property to contact!");';
    

    相反,您应该考虑使用更现代的事件注册方法:

    $(function() {
        $('#selectAllLink, #selectAllLinkB').click(function(e) {
            var a = [];
            $("td.title_listing input:checked").each(function() {
                a.push(this.value);
            });
    
            if ( a.length ) {
                this.href = "/D_ContactSeller.aspx?property=" + a.join(',');
            } else {
                e.preventDefault();
                alert("Select at least one property to contact!");
                return false;
            }
        });
    });
    

    【讨论】:

    • 感谢您的回复...我明白了您想说的...非常感谢。
    • 这很好用...谢谢。但我还是有问题。当没有选中复选框时,它会给出 javascript 消息。单击“确定”后,它开始在页面上加载错误的 Iframe 页面。只需单击鼠标,它就会熄灭。你知道我该如何解决这个问题吗?提前谢谢..
    • 你在说什么 iframe?我在您发布的代码中看不到任何内容。此外,您也可以尝试从 else 语句中返回 false。
    【解决方案3】:

    我会从 id 更改为 class 等等:

    <script type="text/javascript"> 
    
    $(function() { 
        $('.selectAllLink').each(function() { ...
        }
    }
    

    【讨论】:

    • 为什么?我原以为使用 id 选择器会更快,因为它将使用 getElementById 函数而不必遍历 DOM 来查找元素
    • +1 将 ID 指定为 yes 会更高效,但是当您开始为多个元素定义相同的功能时,创建一个类来标识该元素集合会更简洁。这还允许您通过应用类 将任意数量的元素添加到集合中,而不必更改 JavaScript(这有时是开发团队的要求)。因此,与(可能可以忽略不计的)性能提升相比,权衡是可读性和可扩展性/易用性。基准测试会很有趣。
    猜你喜欢
    • 2014-06-29
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 2011-12-16
    • 2012-04-05
    相关资源
    最近更新 更多