Onclick не работает в usercript [duplicate]

Это затронет только небольшую часть пользователей, но я бы хотел, чтобы это было документировано для этой небольшой части. Из-за этой проблемы этот член этой маленькой горстки потратил 6 часов на устранение неполадок с работающим PHP-почтовым скриптом.

Если вы собираетесь в университет, в котором работает XAMPP с сайта www.AceITLab.com, вы должны знать, что наш профессор не сказал нам: брандмауэр AceITLab (а не брандмауэр Windows) блокирует MercuryMail в XAMPP , Вам придется использовать альтернативный почтовый клиент, груша работает на нас. Вам нужно будет отправить учетную запись Gmail с низкими настройками безопасности.

Да, я знаю, это абсолютно бесполезно для электронной почты реального мира. Однако, из того, что я видел, академические настройки и реальный мир часто имеют очень мало общего.

105
задан Braiam 9 April 2016 в 12:04
поделиться

6 ответов

Вероятно, вы имели в виду document.getElementsByClassName() (а затем захватили первый элемент из списка результирующих узлов):

var stopMusicExt = document.getElementsByClassName("stopButton")[0];

stopButton.onclick = function() {
    var ta = document.getElementsByClassName("stopButton")[0];
    document['player'].stopMusicExt(ta.value);
    ta.value = "";
};

Вы все еще можете получить ошибку

document.getElementsByClassName не является функцией

в старых браузерах, хотя в этом случае вы можете предоставить резервную реализацию, если вам нужно поддерживать эти старые браузеры.

197
ответ дан BoltClock 23 August 2018 в 00:08
поделиться
  • 1
    Спасибо, это имеет смысл. Является ли функция для выбора всех классов, более совместимых с браузером? Или можно выбрать диапазон для узлов массива? (т.е. 0-100)? – user547794 20 September 2011 в 06:27
  • 2
    Не как встроенная реализация. Возможно, вам понадобится использовать библиотеку, такую ​​как Mootools или jQuery (что делает ее очень простой). – BoltClock♦ 20 September 2011 в 06:28
  • 3
    для библиотеки lighter-than-jQuery для just выполните выбор, вы можете использовать Sizzle , из чего вы можете выбрать селектора jQuery. – zzzzBov 25 November 2011 в 21:49
  • 4
    Из caniuse.com/#feat=getelementsbyclassname похоже, что только IE8 не поддерживает этот метод. – tmeans 23 January 2015 в 00:18
  • 5
    @tmeans: Да, хотя это было довольно большое дело в то время, когда это было опубликовано. – BoltClock♦ 23 January 2015 в 04:25
    enter code here
var stopMusicExt = document.getElementByClass("stopButton").value;
    stopButton.onclick = function() {
        var ta = document.getElementByClass("stopButton");
        document['player'].stopMusicExt(ta.value);
        ta.value = "";
    };


// .value will hold all data from class stopButton
-1
ответ дан Gajender Singh 23 August 2018 в 00:08
поделиться

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

Если вам нужно делать кросс-браузерную выборку чего-либо, кроме элемента с id с document.getElementById(), то я бы настоятельно предложил вам получить библиотеку, которая поддерживает селектора CSS3 во всех браузерах. Это сэкономит вам огромное количество времени разработки, тестирования и исправления ошибок. Самое простое - просто использовать jQuery , потому что он настолько широко доступен, имеет отличную документацию, имеет свободный доступ к CDN и имеет отличное сообщество людей, стоящих за ним, чтобы отвечать на вопросы. Если это кажется вам больше, чем вам нужно, вы можете получить Sizzle , который является только селекторной библиотекой (на самом деле это движок селектора внутри jQuery и другие). Я использовал его сам по себе в других проектах, и это легко, продуктивно и мало.

Если вы хотите сразу выбрать несколько узлов, вы можете сделать это по-разному. Если вы дадите им все тот же класс, вы можете сделать это с помощью:

var list = document.getElementsByClassName("myButton");
for (var i = 0; i < list.length; i++) {
    // list[i] is a node with the desired class name
}

, и он вернет список узлов, имеющих это имя класса.

В Sizzle это будет так:

var list = Sizzle(".myButton");
for (var i = 0; i < list.length; i++) {
    // list[i] is a node with the desired class name
}

В jQuery это будет так:

$(".myButton").each(function(index, element) {
    // element is a node with the desired class name
});

В Sizzle и jQuery вы может поместить несколько имен классов в селектор, как это, и использовать гораздо более сложные и мощные селектор:

$(".myButton, .myInput, .homepage.gallery, #submitButton").each(function(index, element) {
    // element is a node that matches the selector
});
14
ответ дан jfriend00 23 August 2018 в 00:08
поделиться

document.querySelectorAll работает очень хорошо и позволяет вам сузить ваш выбор.

https://developer.mozilla.org/en-US/docs/Web/API/Document / querySelectorAll

-1
ответ дан KuN 23 August 2018 в 00:08
поделиться

Перед тем, как перейти к дальнейшим проверкам ошибок, сначала проверьте, принадлежит ли его

document.getElementsByClassName ().

дважды проверьте его getElements, а не getElement

4
ответ дан neo 23 August 2018 в 00:08
поделиться

Он должен быть getElementsByClassName, а не getElementByClass. См. Это https://developer.mozilla.org/en/DOM/document.getElementsByClassName .

Обратите внимание, что некоторые браузеры / версии могут не поддерживать это.

6
ответ дан Saket 23 August 2018 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: