jquery点击事件问题

时间:2010-07-05 13:28:15

标签: jquery click

我在Internet Explorer和Chrome下遇到了.click()事件的问题。

所以,我有这个过滤器菜单:

<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(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 ... 所以我要问的是我该怎样做才能防止这种情况发生?

2 个答案:

答案 0 :(得分:0)

如果您没有在文档准备部分中定义apply_btn,那么只是在黑暗中刺伤,否则存在风险可能不存在且您的var将被定义?

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

答案 1 :(得分:0)

请记住,此代码全部在函数内部,我认为您应该删除文档就绪部分。如果在加载时调用“apply”,请将调用包装在document ready语句中,而不是将其链接到函数内。这可能会解决您的问题,因为您可能会在文档就绪事件发生后添加它。

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;
        }
    });
}