0

这一直困扰着我太久了。我正在尝试在一个函数中创建一个单击事件,这似乎不起作用。这是基本布局:

function init() {

$('#a2').click(function() {
//does some stuff. Works fine.

    $('#addDest').click(function() {
    //does more stuff. Works fine…
        if ($("#input2").is(':visible'))     
        {alert("test");};
     });
});
};

该页面始终假设#input2 是可见的!即使它正在打开和关闭。我检查了 Firebug,它能够知道真相。但是,当我单击#input2 时,总是会弹出警报!我可以把我的问题部分扔到函数之外。但这会产生更多问题——因为当文档加载时我会有一些未声明的变量。我想我做了很长的路要走,也许事件处理程序或 clickevents 是更多的解决方案。但是我还没有达到那种程度的理解。我知道它正在阅读该问题区域,就像页面加载时一样。这个问题有更简单的解决方案吗?我知道我需要学习更多……非常感谢!!

4

3 回答 3

1

使用此标记:

<button id="a2">A2</button>
<button id="addDest">Add</button>
<input type="text" id='input2'>

这个CSS:

#addDest,#input2{display:none;}

这有效:

$('#a2').click(function() {
    $('#addDest').show();
});
$('#addDest').click(function() {
    if ($("#input2").is(':visible')) {
        alert("test");
    };
    $('#input2').show();
});

解释:

  • 假设所有元素都存在,即使隐藏。
  • 由于它是隐藏的,因此您可以在 a2 的单击事件处理程序之外添加 addDest 的单击事件,因为如果它被隐藏以启动它就不会被单击。
  • 在我的示例中,input2 最初是隐藏的,因此您只能在第二次单击时看到警报(我在 addDest 的第一次单击事件处理程序中显示它。)

如果你改变

  $('#input2').show();

至:

$('#input2').toggle();

您可以看到它根据输入的可见性而变化。

工作示例:http: //jsfiddle.net/25Vfy/

于 2012-07-18T22:11:24.360 回答
0

你可以尝试这样的事情

$('#a2').click(function() {
    $(this).attr('data-clicked','true'); 
});


$('#addDest').live('click', function() {

    if ($("#input2").is(':visible') && $('#a2').attr('data-clicked') == 'true')     
    {alert("test");};
 });

如果您希望它仅在第一次单击时发出警报

$('#a2').click(function() {
    $(this).attr('data-clicked','true'); 
});

$('#addDest').live('click', function() {

    if ($("#input2").is(':visible') && $('#a2').attr('data-clicked') == 'true'){

           if($(this).attr('data-clicked') != 'true'){
              $(this).attr('data-clicked','true'); 
              alert("test");
           };
     }
});
于 2012-07-18T21:34:31.333 回答
0

问题可能是click#addDest 上的事件被一遍又一遍地绑定。$('#addDest').unbind("click")在绑定之前尝试做一个

于 2012-07-18T21:14:07.637 回答