javascript - load()方法被多次进入(执行)

标签 javascript jquery html

在我的 html 页面中,我有一个图像,单击按钮后,我调用函数 TestLoad() ,它会更改图像的 src,当加载图像时我正在做一些事情.. 。 举个例子: JavaScript:

function TestLoad() {

    alert('before');
     $('#ImgTest').attr('src', 'Images/Image1.jpg');

     $('#ImgTest').load(function () {
         alert('after');
     });
}

html:

 <img id = "ImgTest" alt="" src="" style="width:100px; height:100px"/> 

 <input type="button" onclick ="TestLoad();" value="TestLoad"/>

我的问题是: 当我第一次单击该按钮时,我会在“之后”收到警报一次,如果我再单击一次,警报将显示两次,第三次,3次...

请多多指教 谢谢

最佳答案

每次执行处理程序时,它都会添加另一个新的加载处理程序。您只需分配处理程序一次。如果您确实需要这样做,您可以先删除现有的处理程序或检查事件以查看它是否已被处理:

var $imgTest = $('#ImgTest');

$imgTest.attr('src','Images/Image1.jpg');
$imgTest.unbind('load');
$imgTest.load(function(){
    alert('after');
});

或者:

var events;
var $imgTest = $('#ImgTest');

$imgTest.attr('src', 'Images/Image1.jpg');
events = $imgTest.data('events');
if(events !== null && typeof events.load === undefined){
    $imgTest.load(function(){
        alert('after');
    });
}

关于javascript - load()方法被多次进入(执行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13993338/

相关文章:

html - Bootstrap 类对齐

javascript - 在链接上呈现数据单击不同的选项卡

javascript - 返回新的错误出现在 then not catch 函数中?

javascript - jquery ui resizable返回大小

Jquery隐藏div并按id输入

jquery - 删除文本框后,如何重新编号其余文本框的名称属性?

asp.net - PostBackUrl 在 Html 按钮上不可用

javascript - AsyncStorage 和抽屉呈现始终为空

jquery - 使用 CDN 是否会阻止 Intellisense 适用于 jQuery?

html - 如果我将类添加到 span 标签而不是 div 标签,为什么会有所不同?