2012-12-06 76 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是异步的,你将不得不把对话框代码成功回调中。

玩得开心。

相关问题