2014-03-04 2 views
0

Попытка сделать так, чтобы при каждом щелчке по элементу появлялось имя. Я дал каждому элементу идентификатор, но я, очевидно, что-то пропустил. Код, как написано, интересно, что мой мозг не хватает (то есть я думаю, что я должен делать переменную, но я не уверен.):Возврат цикла с помощью кликов

$(document).ready(function() { 
    var clicks= ["h1", "h2", "p1", "img", "p2", "li1", "li2", "li3", "li4", "li5", "p3"] 

    clicks.forEach(function(element) { 
     var name = $(" ") { 
      $(clicks).click(function); 
      alert("I'm a "+name+"!") 
     }); 
    }); 
}); 

ETA: Также интересно, что делать с «элемент», который я помещаю после функции. Боже, это беспорядок.

+1

пожалуйста маркировать это с языком вы используете (JavaScript?) Для большего числа людей чтобы увидеть его –

+0

Что такое 'name'? Это просто имя элемента или что-то еще? Это помогло бы, если бы вы прикрепили какой-то пример HTML, или даже лучше, если бы вы создали пример на http://jsbin.com –

ответ

-1

Я думаю, что существует много способов кожи этого кота. Но, используя ту же самую структуру программы, как вы уже что-то, как это должно работать:

$(document).ready(function() { 
    var clicks= ["#h1", "#h2", "#p1", "img", "#p2", "#li1", "#li2", "#li3", "#li4", "#li5", "#p3"] 

    clicks.forEach(function(element) { 
     $(element).click(function() { 
      alert("I'm a "+element+"!"); 
     }); 
    }); 
}); 
+0

Я бы хотел, чтобы это сработало, но я попробовал, и это не так. Меня беспокоит, что «элемент» не дает никакой информации. Я не могу понять, как заставить обратный вызов информации для каждого элемента. Я имею в виду, если я хочу, чтобы он сказал: «Я - параграф!» Я думал, что мне нужна переменная. Не знаю. Я потерялся. – Magpie

+0

Я только что протестировал его, и он работает. Обратите внимание, что после второй функции -() я отсутствовал. Я редактировал код в исходном сообщении. Он все еще не работает для вас? –

+0

Хорошо, да. Теперь это работает. Я понял, что у меня есть эти имена как их имена, но я отметил все эти элементы с идентификатором. Я поместил их идентификаторы в массив, но не добавил #. Я исправил это, и теперь он работает. ОДНАКО. Появляется сообщение «Я # p1» Вместо «Я - абзац». Как мне это сделать? Должен ли я идти вперед и создать для него какую-то переменную? – Magpie

0

Я думаю, что вы бы лучше просто устраняя вашу clicks массив и Еогеасп конструкции и с помощью селектора для элементов, которые Вас интересуют :

$(document).ready(function() { 
    var selectorString = 'h1, h2, p1, img, p2, li1, li2, li3, li4, li5, p3'; 

    $(selectorString).click(function() { 
     alert("I'm a " + this.tagName + "!"); 
    }); 
}); 
0

вы находитесь на правильном пути, вот некоторые аннотированный код, который будет делать то, что вы хотите:

// same as $(document).ready(), but shorter: 
$(function(){ 
    var clicks = ["h1" /* etc... */]; 

    // this just iterates through the strings you set above, so you'll have strings inside the loop. 
    clicks.forEach(function(selector){ 
    // any variable you set here would be available inside the click handler, but note that because javascript is asynchronous, this would not be what you expect. 

    // if you're looking for the element, by ID, you'll need to use '#id' instead of 'id'. I append '#' to the beginning so it's using IDs. 
    $('#' + selector).on('click',function(el){ 
     // this is now a jquery reference to the element. 
     var element = $(el); 
     // you can ask the element for it's id here, and because it's in scope, it will be correct. 
     var id = element.attr('id'); 
     alert('I am a ' + id); 
    }); 
    }); 
}); 

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

Если вы хотите использовать карту, чтобы определить свои идентификаторы, вот как этот код будет выглядеть:

// same as $(document).ready(), but shorter: 
$(function(){ 
    var clickMap = { 
    "h1" : "header one", 
    "p1" : "paragraph one" 
    /* etc */ 
    }; 

    // this just iterates through the strings you set above, so you'll have strings inside the loop. 
    // we'll use Object.keys to get just the keys from the map, which will be your IDs. 
    Object.keys(clickMap).forEach(function(selector){ 
    // any variable you set here would be available inside the click handler, but note that because javascript is asynchronous, this would not be what you expect. 

    // if you're looking for the element, by ID, you'll need to use '#id' instead of 'id'. I append '#' to the beginning so it's using IDs. 
    $('#' + selector).on('click',function(el){ 
     // this is now a jquery reference to the element. 
     var element = $(el); 
     // you can ask the element for it's id here, and because it's in scope, it will be correct. 
     var id = element.attr('id'); 
     // we'll use the value from our click map now, to print "paragraph one" for "p1", etc. 
     alert('I am a ' + clickMap[id]); 
    }); 
    }); 
}); 
Смежные вопросы