2010-07-05 183 views
0

我在使用Internet Explorer和Chrome浏览器的.click()事件时遇到了一些问题。jquery点击事件问题

所以,我已经有了一个过滤器菜单:

<div id="filter-checkboxes" style="text-align: left; margin-bottom: 20px;"> 
    <input type="checkbox" id="crop-checkbox" onclick="init_filter('crop');" /> 
    <span id="crop-span">Crop</span> 
    <br /> 

    <input type="checkbox" id="resize-checkbox" onclick="init_filter('resize');" /> 
    <span id="resize-span">Resize</span> 
    <br /> 

    [...] 
</div> 

的init_filter(过滤器)呼吁在年底发送一个AJAX REQ

function apply(action) 
{ 
    var apply_btn = $("#apply-filter-btn"); 
    var values = null; 

    $(document).ready(function(){ 
     apply_btn.unbind("click"); 
     apply_btn.click(function(){ 
      switch (action) 
      { 
       case "crop": 
        values = "x=" + $("#x").val() + "&y=" + $("#y").val() + 
        "&w=" + $("#w").val() + "&h=" + $("#h").val(); 

        if ($("#w").val() !== "0" && $("#h").val() !== "0") 
         apply_send_req(action, apply_btn, values); 
       break; 
      } 
     }); 
    }); 
} 

的问题是,有另一个功能是实际请求发送之前的延迟。 这只适用于Firefox ... 所以我问的是我该怎么做才能防止这种情况?

回答

0

记住这段代码都在一个函数里面,我想你应该放下文档就绪部分。如果您在加载时调用“apply”,则将调用包装在文档就绪语句中,而不是将其链接到函数中。这可能会解决您的问题,因为您可能在添加到文档就绪事件后触发它。

function apply(action) 
{ 
    var apply_btn = $("#apply-filter-btn"); 
    var values = null; 

    apply_btn.unbind("click"); 
    apply_btn.click(function(){ 
     switch (action) 
     { 
      case "crop": 
       values = "x=" + $("#x").val() + "&y=" + $("#y").val() + 
       "&w=" + $("#w").val() + "&h=" + $("#h").val(); 

       if ($("#w").val() !== "0" && $("#h").val() !== "0") 
        apply_send_req(action, apply_btn, values); 
      break; 
     } 
    }); 
} 
+0

删除.ready选择确实有些帮助,但行为并没有firefox那么快。我的意思是在Firefox中这个工作即时。但是,嘿,这不是我遇到的第一个问题:使用Internet Explorer :( – wikiz 2010-07-05 14:27:37

+0

@wikiz - 它似乎是一个与Internet Explorer的永恒挣扎,但版本9应该是一个巨大的改进! – Fenton 2010-07-06 06:54:48

+0

希望如此,我已经设法修复这个问题最终与.click()状态无关......它与ajax请求的async:false选项有关 – wikiz 2010-07-06 07:38:26

0

只是在黑暗中刺伤,你是不是应该在文档就绪区域内定义你的apply_btn,否则有可能不存在风险,你的var将会被定义为?

$(document).ready(function(){ 
    var apply_btn = $("#apply-filter-btn"); // <-- inside .ready() 
+0

即使我在.ready()事件中定义了var apply_btn,最终结果也是一样的。另一个解决方案(不是那么好)将是每个过滤器都有一个应用按钮......这可能会解决延迟问题......我不太确定,我没有尝试过,因为我想尽可能减少代码量 – wikiz 2010-07-05 13:37:58

+0

@wikiz:你确定*最终的结果是相同的,还是你只是*假设*? – 2010-07-05 13:55:37

+0

我刚刚用ready_btn var在ready选择内部尝试了它。 – wikiz 2010-07-05 13:59:25