当我隐藏的选择表单显示时,它不会调用javascript函数

时间:2013-02-08 13:46:03

标签: javascript css jquery-mobile hidden

我有一个隐藏的select元素,其中包含对javascript函数的onchange调用。

当用户点击我页面上的按钮时,我会运行以下代码并显示我的选择表单:

$("#moreDetails2").show();
$('#moreDetails2').trigger("create");

然而,在显示之后,它将不会执行其JavaScript函数。我已经测试过它没有隐藏,它可以工作。

<div id = \"moreDetails2\">  
                    <select  onchange=\"moreDetails2($userID,'$id')\">

                        <option value=\"0\">More Options</option>
                        <option value=\"1\"> View Taste Profile</option>
                        <option value=\"2\"> Add Taste Tags</option>

                    </select>
                </div>

查看chrome中的inspect元素,我没有收到任何错误。

2 个答案:

答案 0 :(得分:1)

jQuery Mobile不能很好地使用onchange =“...或onclick =”...事件绑定,你需要手动完成这样的操作:

$(document).on('pagebeforeshow', '#index', function(){       
    $(document).on('click', '#test-button', function(){     
        $("#moreDetails2").show();
        $("#moreDetails2 select").css('display','block').selectmenu('refresh');
    });    

    $("#moreDetails2 select").on( "change", function(event, ui) {
        moreDetails2('aaaa');
    });    
});

function moreDetails2(text) {
    alert(text);
}

这是根据您的代码创建的一个有效的jsFiddle示例:http://jsfiddle.net/Gajotres/DpdXY/

答案 1 :(得分:0)

使用与全局函数名称和元素标识符相同的名称将导致Chrome,Safari和IE(而非Firefox)出现问题。

尝试将事件处理函数名称更改为“moreDetailsTwo”或其他内容。

Chrome,Safari和IE为每个具有“id”值的元素创建全局符号(即window属性)。我怀疑这会破坏你对“moreDetails2”功能的绑定。