用.click()每次触发?

时间:2010-04-27 10:25:08

标签: javascript jquery

我尝试在.click()上设置一个<a>,以确定每次点击都不会触发,它打算做的是打开一个对话框。

这不是我需要将值传递给我的jquery的唯一问题。我只是想不出这个。

我需要它是<a>因为它已经在下拉菜单中了。你有什么建议吗?

修改 这是我使用的代码,它可以工作

$(document).ready(function() {
        $('#dialog').dialog({ autoOpen: false, bgiframe: true, modal: true, height: 600, width: 1000, Close: function() { $(this).dialog('destroy'); } });

        $('a').live('click', function(evt) {
            evt.preventDefault();
            var ids = $(this).attr('id');
            var first = "<iframe style='width: 100%; height: 100%;' src='" + "" + "'</iframe>'";
            $('.iframe').html(ids);

            $('#dialog').dialog('open');
        });
    });

这段代码打开了对话框,每次点击都会打开,每次都有效,这里的技巧就是最后的'破坏'和暗杀

3 个答案:

答案 0 :(得分:1)

每次点击都会触发。虽然我怀疑情况会是这样,但请检查您是否有任何其他事件处理程序正在监听正在应用event.stopImmediatePropagation()的'a'。尝试在点击处理程序的末尾添加return false,甚至更好:

$('a').click(function(evt) {
        var first = "<iframe style='width: 100%; height: 100%;' src='" + need to put value here + "'</iframe>'";
        $('.iframe').html(first);
        $('#dialog').dialog({ bgiframe: true, modal: true, height: 600, width: 1000 });

        evt.preventDefault();
    });

如果您没有阻止锚标记的默认操作,您可能会发现页面正在重新加载,这会给人留下一些印象。

你在考虑什么样的“价值”?您可以使用jQuery的data()来存储信息,当然您也可以访问该范围内的所有全局变量。

修改 要回答您的评论,您可以按如下方式检索Click事件中的a的ID:

var theIdOfTheA = $(this).attr('id');

请注意,这必须放在处理程序中。

<强> EDIT2:

$('a').live('click', function(evt) {
        var first = "<iframe style='width: 100%; height: 100%;' src='" + $(this).attr('id') + "'</iframe>'";
        $('.iframe').html(first);
        $('#dialog').dialog({ bgiframe: true, modal: true, height: 600, width: 1000 });

        evt.preventDefault();
    });

答案 1 :(得分:1)

DEMO: http://jsbin.com/olalu/edit

确保您关闭对话框,然后再次打开它!

<a href='javascript:;' id='my_unique_id' >click</a>

<强> EDITED

$('a').click(function(evt) {
    evt.preventDefault();

    var theIdOfTheA = this.id;

    var first = "<iframe style='width: 100%; height: 100%;' src='" + 
                "http://www.sf.se" + "'</iframe>'";
      $('.iframe').html(theIdOfTheA);
       $('#dialog').dialog({  
       bgiframe: true, 
       modal: true, 
       height: 600, 
       width: 1000, 
       //this
       Close: function() { $(this).dialog('close'); },
       //OR this OR both
       Cancel: function() { $(this).dialog('close'); }
    });
 });

答案 2 :(得分:0)

您可以通过执行以下操作(来自jQuery docs)将数据传递到事件处理程序:

$('#foo').bind('custom', function(event, param1, param2) {
  alert(param1 + "\n" + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);

所以你可以这样做:

$(document).ready(function() {
    $('a').bind("click", function(event, myValue) {
        var first = "<iframe style='width: 100%; height: 100%;' src='" + myValue + "'</iframe>'";
        $('.iframe').html(first);
        $('#dialog').dialog({ bgiframe: true, modal: true, height: 600, width: 1000 });
    });
});

请注意,您现在使用bind()来绑定事件处理程序,并且该函数正在接收一个值(根据您的需要命名它)。要在iframe中显示google:

$('a').trigger('click', ['http://www.google.com']);