当我做“添加到家”时,js触发(创建)不起作用

时间:2012-12-03 16:45:49

标签: jquery triggers safari

我做了这样的剧本:

$("#last").bind("change", function() {
    var myselect = document.getElementsByTagName("select");
    var numselect = myselect.length;
    var oldid = "select-" + numselect;
    var newidslider = "slider-" + (numselect + 1);
    $('#last').attr('name', oldid);
    $('#last').attr('id', oldid);
    $('#last').selectmenu("refresh", true);
    $('#selects').append('<label for="last" class="select">scegli personaggio:</label><select name="last" id="last"><option value="pippo">pippo</option><option value="pluto">pluto</option><option value="paperino">paperino</option><option value="topolino">topolino</option></select><div class="spazio"></div><input type="range" name="' + newidslider + '" id="' + newidslider + '" value="50" min="0" max="100"/>').trigger('create');
});

当我使用app safari mobile或chrome mobile时,它工作正常,但当我“添加到主屏幕”后访问我的网站时,js不起作用! 任何人都知道这个问题!我陷入了这种境地! 感谢您的关注!

2 个答案:

答案 0 :(得分:1)

委派活动

$("#last").bind("change" , function() {

应该是

$("body").on("change" ,"#last" , function() {

当事件处理程序关联时,元素在DOM中不可用。将事件委派给静态父代可以解决您的问题..

答案 1 :(得分:0)

我不确定与移动设备或“添加到主屏幕”有什么关系,但该代码中有几行可能会导致问题。我只是在阅读代码,我没有运行它,所以我可能是错的。

$('#last').selectmenu("refresh", true);

这将找不到任何要操作的元素,因为前一行已更改项目的ID,因此它不再是“最后”。

$('#selects').append(.....

正在创建一个ID为“last”的新元素,但如果您希望获得onChange函数,则必须再次附加它。原始的bind()调用仅对运行时ID为“last”的项目进行操作。