$(function () { //绑定事件当元素获得焦点(在页面上此元素是两个单选框) $("#divNewsType input").focus(newsTypeSelected); }); //跨域请求数据 function newsTypeSelected() { $.getJSON( "http://192.168.0.7:9993/Services/common.ashx?action=class¶m=1&jsoncallback=?", function (json) { alert("ss"); //这个会死循环式的弹出 } ); }
这段代码会不断的弹出"ss",就像死循环一样,如果去掉alert 替换为其它代码 比如$("id").html("ss"); 则不会死循环
给你分析一下。
(1).获取焦点;
(2).执行fun;
(3).弹出alert;
(4).点击确定;
(5).获取焦点-继续回到第二步;
然后就死循环了。
我觉得应该是跟浏览器有关,有试过浏览器吗?
简单来说就是当alert的时候弹出窗口,有些浏览器视为已经失去焦点,当点alert中的确定后,视为input再次获得焦点,所以再次触发事件。
不是浏览器的问题 firefox 和 IE我都试过了... 只有getJson 处于focus方法体内的时候才会不断的弹出回调方法中的alert
页面加载的时候执行getJson 就不会死循环
@coder_wang: 本身焦点,就会不断的执行这个方法。
@飞舞轻扬在台北: alert 会导致失去焦点? 没有这说法吧
@coder_wang: 我可没说。我说的是,它的光标在焦点上,就会不断的执行这个。
@飞舞轻扬在台北: 那么为什么直接在focus方法体中弹出alert就不会死循环执行呢?
ie9下测试focus没有问题啊!?那你试试改成其它事件试试?比如click?
firefox 和 chrome IE8都有问题... 任何一款有问题都是不行的... 如果不写alert就没问题,其它方法譬如click也没问题. 但click不能代替focus 而且我是想知道为什么,不是为了解决问题
@coder_wang: 能把你用的JQuery版本还有所有测试浏览器的版本发下吗?
@heqichang: JQ 1.7.1 浏览器版本 火狐11.0
用console.log("ss"), alert会影响某些事件
能否详细的解释一下呢,我了解到似乎alert阻塞... 但又不明白为什么focus中就会这样
@coder_wang:
focus时,alert;点击“关闭”,又focus,然后又alert...就这样循环起来了
alert(),当前焦点在alert上,确定完后,又回到 $("#divNewsType input")上,你又给它绑定了一个focus。。又alert。。死循环
順樓上的,你把focus改成click 也不會死循環
你是不是頁面上就這一個input或者是 第一個就是這個input 當我們點擊完alert 按鈕 會焦點回到頁面