2010-11-24 35 views
2

我试图检测何时文件上传输入字段已更新。 在IE & FF我可以做到这一点,如果我使用blur(),但对于Chrome我需要使用change()。 由于Chrome浏览器(我相信safari)不会触发blur事件,因此jquery.supports对象中有一个属性用于检查此问题还是必须使用已弃用的.browser对象?Chrome/Safari模糊功能支持jQuery检查

下面是一个示例页面,显示我的意思,因为下面的海报表示更改的事件适用于所有三种浏览器,并且是我应该使用的功能,但我认为对于检测支持问题的答案仍然有用为模糊事件。

<html> 
    <head> 
     <script src="jquery-1.4.3.min.js" type="text/javascript"></script> 
     <script type="text/javascript"> 
     $(document).ready(function() { 
      $('#test-input').change(function() { alert('changed'); }); 
      $('#test-input').blur(function() { alert('blurred'); }); 
      }); 
     </script> 
    </head> 
    <body> 
     <input type="file" id="test-input"> 
    </body> 
</html> 
+0

这些浏览器正确触发事件...你有一个例子,证明这个问题? `.change()`应该适用于所有浏览器。 – 2010-11-24 13:27:18

回答

0

尝试,如果使用此功能,我可以不采取信贷支持您的活动dectecting,但我忘了,我得到了它:

var isEventSupported = function(eventName) { //Function to detect supported events 
var el = document.createElement('div'); 
    eventName = 'on' + eventName; 
    var isSupported = (eventName in el); 
    if (!isSupported) { 
     el.setAttribute(eventName, 'return;'); 
     isSupported = typeof el[eventName] == 'function'; 
     } 
    el = null; 
    return isSupported; 
    } 

之后定义将包含一个变量您要么/或事件:

var ChangeOrBlur = (isEventSupported('blur')) ? 'blur' : 'change'; //with change as your default 

然后绑定你的功能,无论你prefrered事件是:

$('#test-input').bind(ChangeOrBlur, function(){alert(ChangeOrBlur);}); 

让我知道这是如何工作我们为你...