#javascript #html
#javascript #HTML
Вопрос:
Итак, у меня есть 3 переменные, как показано ниже, предположим, что им присвоены значения. Что я хочу сделать, так это вставить эти переменные в класс img «myimg2», p-класс «myname2» и p-класс «myprof2″, когда пользователь нажимает div class =»info2».
Это должно быть в этом div, потому что я хочу, чтобы пользователь щелкнул в любом месте этого div, чтобы изменить все 3 значения.
Возможно ли это в Javascript?
Javscript:
var storeOnClick,
name,
prof;
HTML
<table class="table2" rules="rows">
<tr>
<td>
<div class="info2" onclick="changeStats(this)" >
<div style="float:left">
<img class="myimg2"style="max-height:80px;" src="Pictures/QuestionMark.png">
</div>
<div style="float:left;">
<p class="myname2">Name: Jane Doe</p>
<p class="myprof2">Profession: Something</p>
</div>
</div>
</td>
<td>
<div class="info2" onclick="changeStats(this)" >
<div style="float:left">
<img class="myimg2"style="max-height:80px;" src="Pictures/QuestionMark.png">
</div>
<div style="float:left;">
<p class="myname2">Name: Jane Doe</p>
<p class="myprof2">Profession: Something</p>
</div>
</div>
</td>
</tr>
</table>
Комментарии:
1. Я не могу использовать Jquery в этом примере : ( но если это единственно возможный способ, было бы интересно узнать
Ответ №1:
Хорошо, я думаю, что у меня есть код. Способ, которым я это делаю, заключается в прикреплении обработчика событий к body
странице. Затем в этой функции я определяю, нажали ли вы на .info
элемент (или на один из его дочерних элементов). Если вы это сделали, то я изменяю значения этого конкретного .info
div
Очень важные части:
// add an event listener to the entire body. I could have iterated through each div with the '.info2' class instead
if (document.body.addEventListener) {
document.body.addEventListener('click', updateCard, false);
} else {
document.body.attachEvent('onclick',updateCard); // stupid IE
}
// this is the callback function for the click event handler
function updateCard(e) {
e = e || window.event;
var target = e.target || e.srcElement; // more IE stuff
// does target have an ancestor of .info2 ?
var el = findAncestor(target, 'info2');
if (el) {
// which elements do we want to update? Only the currently clicked on .info2
var iImg = el.querySelector('.myimg2');
var iName = el.querySelector('.myname2');
var iProf = el.querySelector('.myprof2');
// assign the values a random element from the arrays
storeOnClick = imgArray[Math.floor(Math.random()*imgArray.length)];
name = nameArray[Math.floor(Math.random()*nameArray.length)];
prof = profArray[Math.floor(Math.random()*profArray.length)];
iImg.src = storeOnClick;
iName.innerHTML = lblName name;
iProf.innerHTML = lblProf prof;
}
}
// this is similar to jQuery's $.parents('.class')
function findAncestor (el, cls) {
while ((el = el.parentElement) amp;amp; !el.classList.contains(cls));
return el;
}
Для развлечения, вот как это может выглядеть в jQuery:
$(function() {
$('.info2').on("click",function() {
var t = $(this);
t.find('.myimg2').attr('src',storeOnClick);
t.find('.myname2').html(name);
t.find('.prof2').html(prof);
});
});
Комментарии:
1. По какой-то причине изменяется только первый div =»info2″, у меня их несколько, 12 по 1 после другого в таблице. Может ли это иметь какое-то отношение к [0]??
2. Да, когда я меняю [0] на [1], это изменяет только следующий div — есть ли какой-либо способ изменить [x] на номер onclick div?
3. Да, вам придется перебирать каждый элемент. Я просто указал отдельные значения. Я обновлю демонстрацию и код. На самом деле, вы хотите щелкнуть по первому div, и он обновит все изображения с тем же результатом, или вы хотите щелкнуть, скажем, третий div, и он обновит только тот, на который вы нажали?
4. Только тот, на который я нажал 🙂
5. Хорошо, обновил jsFiddle. это должно работать для любого количества элементов таблицы.
Ответ №2:
Попробуйте это:
Вставьте новое onClick
в info2
:
<div class="info2" onclick="change_text()">
Также измените class
на ID
для ваших полей. Например: class="myname2"
для id="myname2"
Javascript:
function change_text() {
var text1 = document.getElementById('myname2');
var text2 = document.getElementById('myprof2');
var img1 = document.getElementById("myimg2");
if (text1.innerHTML === "Name: Jane Doe") {
text1.innerHTML = "test";
}
if (text2.innerHTML === "Profession: Something") {
text2.innerHTML = "test";
}
if (img1.src == "link here") {
img1.src = "link here";
}
}
Довольно запутанный метод, но вам будет легче понять этот метод 🙂
Комментарии:
1. В таблице есть несколько объектов, поэтому я должен был бы иметь возможность нажимать на них отдельно, чтобы изменять их по отдельности
2. Обновил его для вас 🙂
3. Я не могу заставить его изменить содержимое следующего div в таблице, когда я помещаю onclick в следующий div — он просто изменяет содержимое первого div : (
4. Поскольку моя функция предназначена только для первого div 🙂
<div class="info2" onclick="change_text()">
вам придется использовать функцию для каждого из нихdiv
. Это будет довольно грязно