2012-12-06 35 views
0

基本上如果有這個工作。它打開查詢對話框爲什麼這個JavaScript事件沒有被觸發?

$("#opener").click(function() { 
    $.ajax({ 
     url: "hello.php", 
     success: function(data) { 
      $("#dialog").html(data).dialog("open"); 
     } 
    }); 

    $("#dialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     height: 400, 
     width: 400, 
     modal: true 
    }); 
});​ 

我想從

onClick="callMyFuncion(withDetails); 

調用它,並且基本上與myDetails發送AJAX GET請求..繼承人我嘗試

function getDayDetails(details) { 
    $.ajax({ 
     type: "GET", 
     data: details, 
     url: "hello.php", 
     success: function(data) { 
      $("#dialog").html(data).dialog("open"); 
     } 
    }); 

    $("#dialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     height: 400, 
     width: 400, 
     modal: true 
    }); 
};​ 

並從此處致電

<td class="everyday" onClick="getDayDetails(monthID=<?php echo $month; ?>&dayID=<?php echo $day_num; ?>&yearID=<?php echo $year; ?>);"> 

我是新來的Javascript/jQuery的..感謝所有幫助

+0

呃!我建議你在代表團使用'on',更清潔,更明顯。 – elclanrs

+0

你原來的方式比你的第二種方式要好得多。 –

+0

@elclanrs OP提到他是JavaScript和jquery的新手。他可能不知道'開'。不需要對此有任何態度;人們應該感到舒適的問問題:)這就是說,我完全同意'on'是更好的方法。 [相關文檔在這裏](http://api.jquery.com/on/)。 – benekastah

回答

2

我相信你選擇使用內嵌JavaScript,因爲你沒有辦法讓它動態化。

另一種方法是使用data-*屬性來保存日期值。如下圖所示:

<td class="everyday" 
    data-month="<?php echo $month; ?>" 
    data-day="<?php echo $day_num; ?>" 
    data-year="<?php echo $year; ?>"> 
    ... 
</td> 

,同時繼續使用.click()功能,而不是內聯的JavaScript [如告訴]應更好地避免。

$("td.selector").click(function() { 
    var data = $(this).data(); 
    $.ajax({ 
    type: "GET", 
    url: "hello.php", 
    data: { monthID: data.month, dayID: data.day, yearID: data.year }, 
    success: function(data) { 
     $("#dialog").html(data).dialog("open"); 
    } 
    }); 
});​ 

傳遞data$.ajax作爲對象具有的優點是jQuery將自動編碼的參數。

最後,您可以將.dialog()初始化移動到.ready()函數。

$(document).ready(function() { 
    $("#dialog").dialog({ 
    bgiframe: true, 
    autoOpen: false, 
    height: 400, 
    width: 400, 
    modal: true 
    }); 
}); 
+0

我最終用jquery「on」調用了這個函數,對那個提出這個問題的唧唧喳喳的人的讚美:)我的意思是,爲什麼要以「呃!」開始你的評論?感謝您的幫助。現在一切都很好。 – vinylDeveloper

+0

@vinylDeveloper,如果使用'.on()',則表示而不是'.click()'。我相信'.click()'在內部使用'.on()'。 jQuery充滿了簡短的:) – Alexander

+0

感謝您的提示。現在我有一個焦點問題。對話重點放在我的第一個鏈接上,在它周圍放置一個藍色框。下一個問題只有一個問題。我想這就是我們學習的方式。 :乙 – vinylDeveloper

2

Ajax是異步 ..所以它不會以這種方式工作..

試試這個

$(function(){ // In the DOM ready 
       // define the code for the dialog 
    $("#dialog").dialog({ 
     bgiframe: true, 
     autoOpen: false, 
     height: 400, 
     width: 400, 
     modal: true 
    }); 
});​ 

function getDayDetails(details) { 
    $.ajax({ 
     type: "GET", 
     data: details, 
     url: "hello.php", 
     success: function(data) { 
      $("#dialog").html(data).dialog("open"); 
      // Add the new HTMl to the dialog and then open.. 
     } 
    }); 
} 
+1

重新閱讀代碼,這不是這種情況 - *「所以它不會這樣工作」*。雖然我同意移動它的方式,所以他不會重複初始化對話框 –

0

的PHP創建的結果參數是一個字符串。 所以你也應該用引號把它包起來。

<td class="everyday" onClick="getDayDetails('monthID=<?php echo $month; ?>&dayID=<?php echo $day_num; ?>&yearID=<?php echo $year; ?>');"> 
0

如果我正確理解你的問題,這是因爲data參數是不正確的。
它應該看起來像:

data: { monthID:monthValue, dayID:dayValue, yearID:yearhValue } 
0

一個更好的辦法來做到這一點,以避免使用所有這些怪異的onClick spaggeti代碼,是通過使用數據屬性以包含在DOM的參數。例如您的TD有可能成爲:

<td data-day="Mon" data-month="june"> 

,那麼你可以抓住你喜歡這些參數:

$('td').on('click', function() { 
    var day = $(this).attr('data-day'); 
    //And so on 
    //Add them to a data object 
    var data = {}; 
    data.day = day; 
    //Fire your ajax submitting the data object, 

}); 

最後,由於AJAX是異步的,你將不得不把對話框代碼成功回調中。

玩得開心。

相關問題