jQuery .live('click',function(){});不适用于iPad

时间:2012-05-28 23:21:30

标签: javascript jquery ipad safari mobile-safari

我有一些jQuery函数可以在<SELECT>字段中选择新值时更新某些数字。 <SELECT>项是由用户动态添加的,因此这些函数使用.live()函数。在Mozilla,Chrome和IE8中,一切都按计划进行,但当我尝试访问iPad上的页面时,数字不再相应更新。我必须点击 <SELECT>字段第二次才能更新数字。这是我的一个职能:

    // Update subtotal when .months is changed
    $(".months").live('click',function(){

        var pid = this.id.replace("months", "");
        var price = document.getElementById('row' + pid).className;
        updateSubtotal(pid, price);

    });

所有功能都包含在document.ready()块中。我尝试过“点击更改”,只是“更改”,但是在其他一些浏览器中也存在问题。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

iPad和选择元素不是很好玩。如果您需要所选值来执行任何操作,则需要绑定到模糊

尝试这样的事情( .months 应该是你的选择元素):

// Update subtotal when .months is changed
$(".months").on('blur', function(){

    var pid = this.id.replace("months", "");
    var price = document.getElementById('row' + pid).className;
    updateSubtotal(pid, price);

   });

修改
试试这个:

// Update subtotal when .months is changed
$(document).on('blur|click', ".months", function(){
    var pid = this.id.replace("months", "");
    var price = document.getElementById('row' + pid).className;
    updateSubtotal(pid, price);
    });

关于 on()的好处是你可以将它附加到一个元素并从那里委托。由于您的 $(文档)将始终存在,因此它还可以捕获您动态添加到页面的元素,以及从一开始就不存在的元素。由于您的原始代码使用 live I 期望通过动态加载或生成元素。在这种情况下,为了使用 on()将事件绑定到它,您必须绑定到文档委托到任何 .months 即将到来。

答案 1 :(得分:0)

如果你向div(或span,或任何东西)添加一个空的onclick =“”,它可以工作.... 我不知道为什么:)