为什么跳过jQuery .click()?

时间:2014-01-17 20:19:01

标签: javascript jquery dom

我有一个小的javascript脚本,它遍历一组复选框,它们抓取name属性和值,然后将其转换为json。然后我使用该值设置元素的href,然后尝试触发点击。

出于某种原因,除了点击之外,一切似乎都能正常运行。我成功地更改了href,我在.click()之前和之后的console.log()一个值。除了点击之外,所有东西都会点击。 href中的url是我手动点击它的值。

我将我的脚本放在关闭正文标记之前,并将其包含在$(document).ready()中。我没有重复的ID(我查看了要检查的渲染源)

有人能提供一些见解吗?

这是javascript

$(document).ready(function() {

    $("#multiExport" ).on('click', function(e){
        e.preventDefault();

        var i = 0;
        var list = new Array();

        $('.appSelect:checked').each(function(){
           var name = $(this).attr('name');
           var id = $(this).val();
           list[i] = new Array(name, id);
           i++;
        });

        var serList = JSON.stringify(list);
        console.log(serList);

        var webRoot = $("#webRoot").text();
        $("#exportLink").attr('href', webRoot+"/admin/admin_export_multiExport.php?emailList="+serList); //hits

        console.log('1'); //hits
        $("#exportLink").click(); //this line never executes
        console.log('2'); //hits

    });

});

4 个答案:

答案 0 :(得分:3)

$(selector).click()实际上不会按照用鼠标点击它的方式链接。如果这是你想要的,你应该从元素中解开jquery对象。

$(selector)[0].click();

否则,您所做的只是触发可能存在或不存在的事件处理程序。

答案 1 :(得分:2)

我猜你需要

$(document).on('click', '#multiExport', function(e){

(您可以用最近的元素替换文档,如果有的话)。

如果您需要动态点击事件绑定。

修改

我会尝试这样的事情:

$(document).ready(function() {
    $("#exportLink").click(function() {
        window.location = $(this).attr('href');
    });
    $("#multiExport" ).on('click', function(e){
        //whatever you want
        $('#exportLink').attr('href', 'something').trigger('click');
    });
});

答案 2 :(得分:0)

  

$( “#exportLink”)点击(); //这会启动活动。

答案 3 :(得分:0)

我必须承认,我很惊讶.click()不起作用。

如果想要加载页面,那么替代方案是

$(function() {
  $("#multiExport" ).on('click', function(e){
    e.preventDefault();
    var list = [];

    $('.appSelect:checked').each(function(){
       var name = $(this).attr('name');
       var val = $(this).val();
       list.push([name, val]);
    });

    var serList = JSON.stringify(list);

    var webRoot = $("#webRoot").text();
    location=webRoot+"/admin/admin_export_multiExport.php?emailList="+serList;
  });
});