2013-12-18 51 views
0

我對jQuery/Javascript有一個相當奇怪的問題。 (這發生在IE,FF和鉻)點擊功能生成的jQuery對話框中的元素

我有一個(asp.net)網頁如下:有很多按鈕

報頭(在的PreRender生成)

隱藏DIV與按鈕做回發(生成的OnLoad)&一個div來作爲對話


頁使用帶有一個iFrame

可以說我有一個按鈕'1234_stuff'作爲它的CLIENTID在Hidden div中。 我有一個按鈕在頭上有一個OnClientClick = "$('#1234_stuff').click();return false;";

當我點擊標題中的按鈕,這完美的作品。好。

我在報頭中的其他按鈕(允許稱之爲PopupStarter),其具有OnClientClick = "Popup('Titel', 'Description', '1234_stuff');return false;";

的JavaScript彈出功能如下:

function Popup(title, description, buttonid) { 
    $('#dialog-popupText').html('<p><b>' + title + '</b></p><p>' + description + '</p>'); 
    var buttonsToShow; 
    if (buttonid!= null) { 
     buttonsToShow = { 
      'ClickMe': function() { 
       $('#' + buttonid).click(); 
       $(this).dialog('close'); 
      }, 
      'Cancel': function() { 
       $(this).dialog('close'); 
      } 
     } 
    } else { 
     buttonsToShow = { 
      'Cancel': function() { 
       $(this).dialog('close'); 
      } 
     } 
    } 
    $('#dialog-popup').dialog(
    { 
     resizeable: false, 
     width: 'auto', 
     modal: true, 
     draggable: false, 
     buttons: buttonsToShow 
    }); 
} 

當我點擊「PopupStarter」按鈕jQuery對話框按預期顯示,沒有麻煩。但是...當我點擊ClickMe按鈕時,什麼也沒有發生(除了關閉對話框)。

我會覺得我做錯了什麼事:讓我用一個定時器試了一下:

function Popup(title, description, buttonid) { 
    $('#dialog-popupText').html('<p><b>' + title + '</b></p><p>' + description + '</p>'); 
    var buttonsToShow; 
    if (buttonid!= null) { 
     buttonsToShow = { 
      'ClickMe': function() { 
       setTimeout(""$('#"" + buttonid + ""').click();"", 100); 
       $(this).dialog('close'); 
      }, 
      'Cancel': function() { 
       $(this).dialog('close'); 
      } 
     } 
    } else { 
     buttonsToShow = { 
      'Cancel': function() { 
       $(this).dialog('close'); 
      } 
     } 
    } 
    $('#dialog-popup').dialog(
    { 
     resizeable: false, 
     width: 'auto', 
     modal: true, 
     draggable: false, 
     buttons: buttonsToShow 
    }); 
} 

這個作品!現在很奇怪。所以我打電話給父母jQuery

parent.$('#' + buttonid).click(); 

這也行不通。

最重要的是,當我在瀏覽器的控制檯中手動輸入每一行時,它們都可以工作!

+0

你的問題是什麼? – simbabque

+0

那麼,使用setTimeout()的作品。但其中之一是解決問題的一種骯髒的方式。問題變成:如何直接用javascript點擊按鈕(而不是使用定時事件來實現)。 –

回答

0

嘗試使用這樣的:

$(document).on('click', '#' + buttonid, function(){ 
    Your functions here; 
}); 

不上的頁面加載存在任何項目,都需要有事件監聽器適用於在DOM存在的文檔,身體,或任何父選擇頁面加載。 Javascript不會將偵聽器附加到DOM加載時不存在的對象。希望這可以幫助!

+0

非常真實,這就是爲什麼在PreRender上生成的標題按鈕和jQuery對話框中的按鈕都在隱藏div的按鈕上「點擊」(這些都是生成的OnLoad)。 而SetTimeout事件只是執行完全相同的動作,但100ms後,這確實奏效。這讓我總結了這個問題,不要用他們自己的按鈕,但它在哪裏讓我想知道。 –

+0

如果我誤解了我的道歉。祝你好運 :) – wrxsti