相关疑难解决方法(0)

JQuery事件模型并防止重复处理程序

我再次想要使用$("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处理).

javascript jquery events triggers bind

33
推荐指数
4
解决办法
4万
查看次数

如何防止事件被多次绑定

 $('.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)

在这种情况下,我调用了重复的代码.如何检测事件是否已被绑定以防止它触发两个警告框?

jquery

18
推荐指数
4
解决办法
2万
查看次数

只使用jQuery添加一次OnClick处理程序 - 即使再次调用

如果我将处理程序分配给元素的OnClick事件两次,则处理程序将执行两次.但我想改变这一点,即使我分配两次,处理程序也只会执行一次.

证明问题的荒谬示例:

$('.button').click(
    function(){
       alert('here');
});
$('.button').click(
    function(){
       alert('here');
});
Run Code Online (Sandbox Code Playgroud)

所以我已经添加了两次处理程序.现在,当我单击该类的元素时,我会得到两个警告框.

问题是,我如何限制它,所以我只会得到一个警报框?

jquery

18
推荐指数
5
解决办法
3万
查看次数

如何避免,Ajax按钮单击两次

我试图使用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)

javascript php ajax jquery button

2
推荐指数
1
解决办法
727
查看次数

标签 统计

jquery ×4

javascript ×2

ajax ×1

bind ×1

button ×1

events ×1

php ×1

triggers ×1