#javascript #button #text #knockout.js
#javascript #кнопка #текст #knockout.js
Вопрос:
Я смотрю, могу ли я избежать написания отдельных функций для обработки отдельных нажатий кнопок. Если я могу прочитать текстовое значение кнопки, на которую нажали, то я могу использовать одну функцию с именем «showName» и использовать оператор switch для обработки каждого соответствующего нажатия кнопки.
Возможно ли это?
<body>
<button data-bind="click: showName">Show Name</button>
<button data-bind="click: showName">Show Lists</button>
</body>
Я пробовал различные методы ниже. Я хочу получить значение «Показать имя» при нажатии первой кнопки. Но ни один из них не работает.
function TutorialsViewModel(){
this.showName = function(e){
console.log(e);
console.log(e.target);
console.log(e.target.value);
};
}
ko.applyBindings(new TutorialsViewModel());
Комментарии:
1. Вы пробовали устанавливать
id
атрибуты для своих<button>
тегов?2. Я смотрел, могу ли я также избежать тегов id. Чтобы сделать элементы как можно более универсальными. Согласно вашему ответу ниже, исправление заключается в расширении параметров моей функции до (data, e) . Хотя он работает без использования id, как вы предлагаете, лучше использовать уникальные атрибуты id. Таким образом, я могу изменить текст кнопки позже без необходимости изменять соответствующий внутренний текст в коде JS. Спасибо.
Ответ №1:
Вместо использования e.target.value
вам нужно использовать e.target.innerText
.
Вот рабочая демонстрация: http://jsfiddle.net/e8JPT/315 /
HTML
<body>
<button id="btn1" data-bind="click: log">Show Name</button>
<button id="btn2" data-bind="click: log">Show Lists</button>
</body>
Javascript
var TutorialsViewModel=function(){
this.log = function(data, event){
alert("You clicked on : " event.target.innerText);
};
}
ko.applyBindings(new TutorialsViewModel());
Надеюсь, это поможет!
Комментарии:
1. Аааа, спасибо. Моей функции javascript требовалось 2 параметра (данные, событие). Я предоставлял только 1 параметр (e). Я был уверен, что делаю это правильно концептуально. Просто не хватало синтаксиса. Очень признателен!
2. Я не упомянул, что я также пробовал e.target.innerHTML. Как только я исправил параметры, это тоже работает. Приветствия !
Ответ №2:
Используя stackoverflow в качестве примера, вы можете использовать функцию getElementsByName
getElementsByClassName
или getElementsById
для извлечения любого элемента со страницы и иметь доступ ко всем его свойствам. name
, value
, innerHTML
, и т.д…
Пример из StackOverflow из консоли любого браузера (F12 для открытия):
var button = document.getElementById("submit-button");
//this only works if the button has id="submit-button"
button.value;
// output : "Text in button"