我的代码如下:
<!DOCTYPE html>
<html>
<head>
<title>this is a test</title>
<script src="jquery-1.12.1.min.js"></script>
</head>
<body>
<input type="file" id="testId"/>
<button id="btn" class="test">click me</button>
<script>
function click(){
$('#testId').click();
}
$(document).ready(function(){
$('body').on('click', '.test', function(e){
$.ajax({
url : 'XXXXXXXX',
method : 'GET',
dataType : 'jsonp',
success : function(){
click();
}
});
});
});
</script>
</body>
</html>
请问各们大神,为什么$('#testId').click()并未起作用,input file没有弹出选择框?
PHP中文网2017-04-10 18:08:04
那个方法名称用click确实会存在问题,举个例子
<html>
<body>
<button onClick="click()">hit me</button>
<script>
function click()
{
alert("123");
}
</script>
</body>
</html>
你会发现点击没效果。至于你那个问题的话,先看看ajax能请求成功吗
PHP中文网2017-04-10 18:08:04
实际上你并没有触发'.test',每次点击的实际上是'#btn'按钮,
两个方法:
1、监听'.test'改成监听'#btn':
$('body').on('click', '#btn', function(e){...});
2、更改dom,将<button id="btn"><span class="test">click me</span></button>改为:
<span class="test">click me</span>
根据button标签的定义,button标签里面包含的是button的内容,所以button里面不应该包含其他dom节点,题主这是乱写嵌套,显然浏览器不会处理button里面的节点,只当做是内容来处理,所以你给button里面的内容添加事件监听是永远无法触发的。
另外,方法名是可以用click的,毕竟题主的click方法是全局的,而jQuery的click方法是jQuery里面的变量,两者不冲突
PHP中文网2017-04-10 18:08:04
<!DOCTYPE html>
<html>
<head>
<title>this is a test</title>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<input type="file" id="testId"/>
<button id="btn"><span class="test">click me</span></button>
<script>
function click(){
$('#testId').click();
}
$(function(){
$('.test').on('click', function(){
$.ajax({
url : '/public/index.php?s=index/index/hello',
method : 'GET',
dataType : 'json',
async: false,
success : function(data){
click();
}
});
});
});
</script>
</body>
</html>
不知道你出于什么用意,要通过body去绑定click事件,你没有完整的上下文,所以我也直接给出了代码,如果有问题可以继续讨论