Использование данных в ассоциативном массиве в качестве объекта для обработчика событий - PullRequest
0 голосов
/ 23 сентября 2011

После полудня все

У меня есть некоторые данные -

    var searchwithin = [
{id:"clearwithin", type:"button"},
    {id:"search_radius", type:"select"},
    {id:"for_lease" ,type:"checkbox"},
{id:"for_sale", type:"checkbox"},
]; 

Это будет показывать и скрывать информацию в зависимости от того, что нажимается (это только небольшой фрагмент данных.

Я уже разработал, как проверить свойство типа, вот что я хочу знать:

Если тип является кнопкой, как мне получить доступ к значению идентификатора для этих элементов изатем сгенерируйте функцию щелчка, чтобы использовать идентификатор в качестве имени кнопки, чтобы связать функцию с.

Заранее спасибо

Фил

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

Сначала исправьте синтаксическую ошибку в таблице searchwithin, удалив запятую после последнего элемента в таблице. Это приведет к ошибке в IE6 / IE7.

Затем вы можете использовать этот код для просмотра массива searchwithin, чтобы найти id для соответствующего type, а затем установить обработчик события click для этого id.

var searchwithin = [
    {id:"clearwithin", type:"button"},
    {id:"search_radius", type:"select"},
    {id:"for_lease" ,type:"checkbox"},
    {id:"for_sale", type:"checkbox"}
]; 

function findIdByType(target) {
    for (var i = 0; i < searchwithin.length; i++) {
        if (searchwithin[i].type === target) {
            return(searchwithin[i].id);
        }
    }
}

var id = findIdByType("button");
if (id) {
    $("#" + id).click(function() {
        // do whatever you want to do on the click function here
    }
});

Я заметил, что в вашей таблице есть две записи для type:checkbox. Приведенное выше предложение кода вернется и будет действовать только для первой записи. Если вы хотите настроить обработчики кликов для обоих этих идентификаторов, то необходимо изменить код или таблицу. Если это все, для чего используется таблица, ее можно изменить на селектор (который может содержать более одного идентификатора), например:

var searchwithin = [
    {id:"#clearwithin", type:"button"},
    {id:"#search_radius", type:"select"},
    {id:"#for_lease, #for_sale", type:"checkbox"}
]; 

function findSelectorByType(target) {
    for (var i = 0; i < searchwithin.length; i++) {
        if (searchwithin[i].type === target) {
            return(searchwithin[i].id);
        }
    }
}

var selector = findSelectorByType("button");
if (selector) {
    $(selector).click(function() {
        // do whatever you want to do on the click function here
    }
});
0 голосов
/ 23 сентября 2011

Объедините '#' и свойство id и используйте полученную строку в качестве селектора.

$.each($.grep(searchwithin, function(i) { return i.type=='button'; }), 
    function () { 
        var item = this;
        $('#'+this.id).bind('click', function(e) {
            alert('clicked: ' + item.id +' '+ item.type);
        });
    });

Рассмотрите возможность использования селекторов для поиска элементов, а не ID-карт.

$('input[type="button"].search').bind('click', onSearch);
...