我再次想要使用$("divid").load(...)将包含其自己脚本的页面加载到div中.我面临的问题与事件有关.假设我们从父页面和我们绑定的加载页面("猴子")触发("猴子")并且只是做一个警报("猴子绑定").如果多次调用相同的load方法,则会多次调用bind.现在我可以在绑定之前取消绑定它,或者在绑定之前检查处理程序的数量,然后不绑定它以防止这种情况.这两个选项都不是可伸缩的,如果我以后想要绑定到另一个"子页面"(加载到div中的页面)中的触发器.
我理想的做法是检查我即将添加的处理程序是否已经存在,但我仍然想要使用匿名处理程序...(我想的最后一个请求有点问).目前我有一个解决方法,使用预定义/命名方法,然后在绑定之前检查它.
// Found this on StackOverflow
function getFunctionName(fn)
{
var rgx = /^function\s+([^\(\s]+)/
var matches = rgx.exec(fn.toString());
return matches ? matches[1] : "(anonymous)"
}
function HandlerExists(triggerName, handlerName) {
exists = false;
if ($(document).data('events') !== undefined) {
var event = $(document).data('events')[triggerName];
if(event !== undefined)
{
$.each(event, function(i, handler) {
alert(handlerName);
if (getFunctionName(handler) == handlerName) {
exists = true;
}
});
}
}
return exists;
}
Run Code Online (Sandbox Code Playgroud)
这是一种非常粗暴的方式,我觉得,但似乎工作.我只是在绑定之前执行以下操作:
if (!HandlerExists("test", "theMethod")) {
$(document).bind("test", theMethod);
}
Run Code Online (Sandbox Code Playgroud)
有没有人有更优雅的解决方案?例如,有没有办法检查特定的脚本是否已加载?所以我可以使用getScript()在第一次加载时从子页面加载js,然后根本不加载它在后续加载(并且只是触发一个触发器,由他预先存在的js处理).
$('.ajax').click
(
function()
{
// If been bound then we need to return here.
alert(':D');
}
)
$('.ajax').click
(
function()
{
// If been bound then we need to return here.
alert(':D');
}
)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我调用了重复的代码.如何检测事件是否已被绑定以防止它触发两个警告框?
如果我将处理程序分配给元素的OnClick事件两次,则处理程序将执行两次.但我想改变这一点,即使我分配两次,处理程序也只会执行一次.
证明问题的荒谬示例:
$('.button').click(
function(){
alert('here');
});
$('.button').click(
function(){
alert('here');
});
Run Code Online (Sandbox Code Playgroud)
所以我已经添加了两次处理程序.现在,当我单击该类的元素时,我会得到两个警告框.
问题是,我如何限制它,所以我只会得到一个警报框?
我试图使用ajax
调用将数据插入数据库
我的问题是当我点击按钮两次数据存储两次
它让我生病了.我怎么能避免呢?
<from><button id ="GdStartTest"> </button></form>
$("#GdStartTest").click(function(){
$.ajax({
url: "gdcontroller.php",
method: "POST",
Run Code Online (Sandbox Code Playgroud)
而这个控制器:
$studentQuery = $conn->query("INSERT INTO r_job_scores
Run Code Online (Sandbox Code Playgroud)