2016-02-01 3 views
1

Возможно ли, чтобы кнопка наследовала свое свойство value из своего родительского элемента?Может ли элемент кнопки HTML наследовать его значение от родителя?

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

Заранее благодарен!

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

side += "<li href='#' class='list-group-item' value="+friend.id+" style='height:75px'>"; 
side += "<button type='button' onclick='sidebarUserOptions(this)' style='height:95%; width:15%;'>View</button>"; 
side += "<button type='button' onclick='sidebarUserOptions(this)' style='height:95%; width:15%;'>Visit</button>"; 
side += "<button type='button' onclick='sidebarUserOptions(this)'style='height:95%; width:15%;'>Edit</button>"; 
side += "</li>"; 
+2

Не могли бы вы уточнить, что это вам нужно, и показать нам, что вы пробовали? – j08691

+0

Каков ваш («[mcve]») HTML? И пытались ли вы решить эту проблему самостоятельно? Какой конкретный результат или результат вы хотите, учитывая HTML, который вы будете размещать? Должно ли это быть в ответ на действие пользователя или событие? –

+1

Некоторый код, который даст контекст, поможет. В общем, похоже, что вы можете делать onclick на каждой кнопке, которая вызывает функцию с помощью '(this)', неважно, вам даже не нужно '(this)', потому что она уже присутствует в 'onclick 'событие. Затем вы можете отредактировать свою форму и данные, которые вы отправляете на сервер, по вашему желанию.Например, у меня есть куча кнопок, которые изменяют действие формы на тот, который хранится внутри свойств кнопки через '$ (this) .closest (« form »). Attr (« action », $ (this) .attr («formAction»)); ' – Nomenator

ответ

0

Теоретически да, с attr и CSS variables:

#parent { 
 
    --value: attr(data-value); 
 
} 
 
#parent > button::after { 
 
    content: var(--value); 
 
}
<div id="parent" data-value="Hello!"> 
 
    <button type="button"></button> 
 
    <button type="button"></button> 
 
</div>

Однако, обратите внимание, что:

  • Ни одна крупная реализация не поддерживает attr на свойства диффере чем content.
  • Переменные CSS в настоящее время поддерживаются только Firefox и Safari.
  • Псевдоэлементы CSS должны использоваться только для декоративных целей, а не для вставки содержимого.
+0

Я думаю, что «это пока еще не поддерживается», это довольно мягко. Согласно [MDN] (https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables), он не поддерживается вообще, кроме Firefox и Safari, что оставляет большинство пользователей. – j08691

+2

Это устанавливает содержимое, поэтому пользователь увидит сгенерированную метку кнопки. Но он не устанавливает значение, поэтому оно не будет представлено в форме. – Barmar

1

Не требуется перестройка. Ключ состоит в обнаружении события click на li вместо button. Вы можете использовать event.target в функции щелчка, чтобы получить доступ к нажатой кнопке. Вот fiddle демонстрация концепции. Первая функция doToAll - это просто вспомогательный метод для итерации по набору элементов dom, а выходной div - для простого способа показать результат функции.

HTML:

<div id="output"></div> 
<ul> 
<li data-info="first li"> 
    <button> 
    One 
    </button> 
    <button> 
    Two 
    </button> 
    <button> 
    Three 
    </button> 
</li> 
<li data-info="second li"> 
    <button> 
    One 
    </button> 
    <button> 
    Two 
    </button> 
    <button> 
    Three 
    </button> 
</li> 
</ul> 

SCRIPT:

function doToAll(elems, callback){ 
    var len = elems.length; 
    while(--len > -1){ 
    callback(elems[len]); 
    } 
} 

var lis = document.querySelectorAll('li'), 
    output = document.getElementById('output'); 

doToAll(lis, function(li){ 
    li.addEventListener('click', function(e){ 
    var tgt = e.target, //get the element that was clicked on 
     liparent = this; //the click event is bound to the li, so 'this' still refers to the list item and not the button 
    if(tgt.tagName == "BUTTON"){//check to make sure a button was clicked, and not something else inside the li 
     output.textContent = tgt.textContent + ', ' + liparent.getAttribute('data-info'); 
     //reports a piece of data from the button and the li 
    } 
    }) 
}) 
4

В вашем OnClick (sidebarUserOptions) Вы можете обратиться к этой переменной, получить родительский узел, а затем получить значение из этого родительского узла ,

Таким образом, с помощью JQuery:

$(this).parent().attr('value'); 

Here is a working CodePen example

+0

Это тот! Благодаря! Я был так занят, думая о том, как «наследовать», я не исследовал простые способы просто получить родителя. –

+0

Удивительный! Если вы не хотите использовать jQuery, вы можете использовать свойство [parentNode] (http://www.w3schools.com/jsref/prop_node_parentnode.asp) и метод [getAttribute()] (http: //www.w3schools .com/jsref/met_element_getattribute.asp) ванильного HTML и JS –

+0

Уже используя jQuery, чтобы это соответствовало, еще раз спасибо! –

Смежные вопросы