JQuery Mobile Выберите привязку данных меню

Код внизу страницы динамически заполняет меню выбора jQuery Mobile. В дополнение к заполнению меню я хотел бы привязать данные к каждому пункту меню и назначить обработчик щелчков. Это делается с помощью следующей строки.

menuItem.bind("click",{testdata: "test"}, clickHandler); $("#testMenu").append(menuItem); }

Этот подход работал со списками jQuery Mobile в прошлом. Кто-нибудь может увидеть, что идет не так?

Полный код:

<!DOCTYPE html>
<html xmlns:fb="https://www.facebook.com/2008/fbml">

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript" src="fbObj1.js"></script>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.css"
    />
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
    />
    <link rel="stylesheet" href="http://jquerymobile.com/test/docs/buttons/css/themes/default/jquery.mobile.css"
    />
    <link rel="stylesheet" href=http://jquerymobile.com/test/docs/buttons/_assets/css/jqm-docs.css "/>
<link rel="stylesheet "  href="http://jquerymobile.com/test/docs/buttons/css/themes/default/jquery.mobile.css " />  
</head> 
<body> 

<script>

    function clickHandler(e) {
    alert("click ");
    alert(e.testdata);
    };


$(document).ready(function() {
   var int = 0;

        for (int=0;int<=4;int=int+1)
        {
    var menuItem = $("<option id=''></option>"); 
    menuItem.html("Item "+int); menuItem.attr('id',int); 
    //DATA BIND LINE
    menuItem.bind("click",{testdata: "test"}, clickHandler); 
    //menuItem.on("click", {testdata: "test"}, clickHandler);
    $("#testMenu").append(menuItem); 
        }   
    $("#testMenu").selectmenu('refresh');
    $("#testMenu").selectmenu('open'); });
</script>
    <div data-role="page">
        <div data-role="header"></div>
        <div data-role="content">
            <div data-role="fieldcontain" id="testMenuFC" style="DISPLAY: none">
                <select name="testMenu" id="testMenu" data-native-menu="false"></select>
            </div>
        </div>
    </div>
    </body>

2 ответа

Решение

     <link rel="stylesheet"  href="http://jquerymobile.com/test/docs/buttons/css/themes/default/jquery.mobile.css" />  
<link rel="stylesheet" href=http://jquerymobile.com/test/docs/buttons/_assets/css/jqm-docs.css"/>
<link rel="stylesheet"  href="http://jquerymobile.com/test/docs/buttons/css/themes/default/jquery.mobile.css" />  
  </head> 
<body> 

<script>

$(document).ready(function() {

    function clickHandler(e) {
       var listItem = $(":selected",$(this));
       alert(listItem.data("test").first);
       alert(listItem.data("test").second);
    };

var int = 0;

        for (int=0;int<=4;int=int+1)
{
var menuItem = $("<option id=''></option>");
menuItem.html("Item "+int);
menuItem.attr('id',int);
menuItem.data("test", { first: int, second: "hello" })
$("#testMenu").append(menuItem);
} 
$("#testMenu").on("change",{testdata: "test"}, clickHandler); 
$("#testMenu").selectmenu('refresh');    
  $("#testMenu").selectmenu('open');            
});

</script>

<div data-role="page">

<div data-role="header"> 

</div>

<div data-role="content">
<div data-role="fieldcontain" id="testMenuFC" style="DISPLAY: none">
    <select name="testMenu" id="testMenu" data-native-menu="false">
    </select>
</div>

Менять

menuItem.bind 

в

$("#testMenu").bind

Редактировать:

function clickHandler(e) {
  e.preventDefault();
  alert($(this).val());     
 }

// я забыл упомянуть, что для "выбора меню" вы должны использовать событие "изменить" вместо "щелчка"

$("#testMenu").on("change",
  {testdata: "test"}, 
  clickHandler); 
});

Изменить 2:

var i = 0;
        function clickHandler(e) {
            e.preventDefault();
            $(":selected",$(this)).html(i).val(i).parent().selectmenu('refresh');
            alert($(":selected",$(this)).val());
            i++;
         }
Другие вопросы по тегам