【发布时间】:2017-04-09 15:37:00
【问题描述】:
我将点击函数foo 绑定到jquery.ajax 中的锚标记。我面临的问题是我必须请求两次或单击锚标记两次才能发出请求。我也注意到在网络栏下的浏览器中没有触发 ajax 请求,这是我第一次点击锚标记时。但是当我点击它两次时,我在网络选项卡中看到了两个 ajax 请求。我不知道发生了什么事?
<script type="text/javascript">
function show(thelink)
{
var cat = thelink.innerHTML;
var productContainer = document.getElementById("productContainer");
$.ajax({
type:"POST",
url:"fetchdata1",
data:"cat="+cat,
success:function(data){
productContainer.innerHTML ="";
var $productContainer = $('#productContainer');
$.each(data,function(key,value){
if(value['newVar'] === 1)
{
$productContainer.append("<div id='productBox' class='grid_3'>\n\
<a href='product.jsp?id="+value['id']+"'><img src='"+value["image"]+"'/></a><br/>\n\
<a href='product.jsp?id="+value['id']+"'><span class='black'>"+value['name']+"</span></a><br/>\n\
<span class='black'>By "+value['company']+"</span><br/><span class='red'>RS."+value['price']+"</span>\n\
<br/><br/><a href='#' class='remove' onclick='foo(this)' pid='"+value['id']+"'>REMOVE</a></div>");
}
else{
$productContainer.append("<div id='productBox' class='grid_3'>\n\
<a href='product.jsp?id="+value['id']+"'><img src='"+value["image"]+"'/></a><br/>\n\
<a href='product.jsp?id="+value['id']+"'><span class='black'>"+value['name']+"</span></a><br/>\n\
<span class='black'>By "+value['company']+"</span><br/><span class='red'>RS."+value['price']+"</span></div>");
}
}) ;
}
});
return false;
}
function foo(obj){
var pid = $(obj).attr("pid");
$(obj).bind("click", function(){
$.ajax({
type:"POST",
url:"removeFromWishlist",
data:"pid="+pid,
success:function(response){
console.log("sent ajax request");
}
});
});
}
【问题讨论】:
-
如果你把它保存在一个文档准备函数中会很好api.jquery.com/ready
-
将 jQuery click 处理程序绑定到
onclick处理程序内的元素是没有意义的。这就是为什么您必须单击两次但第二个 clcik 也会绑定一个新的 jquery 侦听器 -
@KishanKumar 你不能把
foo()放在里面准备好...它不会在发生点击的全局空间中可用 -
@charlietfl 那我该怎么办?
-
在元素上使用类并使用事件委托并停止使用内联javascript
标签: javascript jquery ajax