#jquery
#jquery
Вопрос:
Я рву на себе волосы, пытаясь сделать что-то, что, как мне кажется, должно быть довольно простым. Я ценю любую помощь!
Я хочу вызвать функцию javascript при нажатии на a, передать ей две переменные, а затем использовать jquery, чтобы скрыть этот интервал. Простым примером является
function myFunction(data1,data2) {
var data = data1 data2;
alert(data);
$(document).ready(function(){
$(this).hide(); <---doesn't work
});
}
<span onClick="myFunction(1,3)">Click here to send 1, 3 and hide this span</span>
<span onClick="myFunction(8,9)">Click here to send 8, 9 and hide this span</span>
Переменные (1,3) и (8,9) загружаются динамически с помощью php-скрипта. Добавление двух переменных вместе не входит в намерения скрипта, но это кажется самым простым способом объяснить, что мне нужно.
Так как же заставить $(this)
работать в функции, которой должны передаваться переменные?
Ответ №1:
Вы пытаетесь использовать .hide()
$(document)
вместо span
Не совсем уверен, почему вы помещаете это в инструкцию doc ready… попробуйте сделать это следующим образом…
function myFunction(span,data1,data2) {
var data = data1 data2;
alert(data);
$(span).hide();
}
<span onClick="myFunction(this,1,3)">Click here to send 1, 3 and hide this span</span>
<span onClick="myFunction(this,8,9)">Click here to send 8, 9 and hide this span</span>
Комментарии:
1. Смехотворно, и мой получил повышение. 1 за практически идентичный ответ.
Ответ №2:
Инициализируйте свой JS, затем загрузите функцию. Вы не должны вкладывать ready
функцию туда.
Кроме того, вы можете передать this
в качестве параметра функции ссылку на объект, который вызвал функцию, например so (также, onClick
недопустимо. onclick
это. Большая разница, да?):
function myFunction(that, data1,data2) {
var data = data1 data2;
alert(data);
$(that).hide(); // Can't use this, so that will work.
}
<span onclick="myFunction(this, 1,3)">Click here to send 1, 3 and hide this span</span>
<span onclick="myFunction(this, 8,9)">Click here to send 8, 9 and hide this span</span>
Комментарии:
1. вы буквально только что скопировали / вставили мой ответ 2 минуты спустя?
2. Нет, я работал над этим, а затем появился ваш. Я думаю, вы тоже отредактировали. Не так много других способов сделать это, так что не думайте, что я скопировал / вставил ваш ответ (зачем кому-либо ???).
Ответ №3:
джондавидджон прав. Однако встраивать обработчики событий в html — плохая практика. Так и должно быть:
function myFunction(data1,data2) {
var data = data1 data2;
alert(data);
$(this).hide();
}
$(document).ready(function(){
$("#span1").click(function(){
myFunction(1,3);
});
$("#span2").click(function(){
myFunction(8,9);
});
});
…
<span id="span1">Click here to send 1, 3 and hide this span</span>
<span id="span2">Click here to send 8, 9 and hide this span</span>
Надеюсь, это поможет.
Комментарии:
1. за исключением того, что вы пытаетесь использовать
.hide()
глобальный объект window, который определенно не будет работать … кроме того, если вы предоставите подобный ответ, также укажите, как он будет вводить аргументыmyFunction()
с помощью php…2. Могу я спросить, почему это плохая практика?
3. Цитируется по вопросу…
"The variables (1,3) amp; (8,9) are loaded dynamically with a php script."
4. джондавидджон, ты ошибаешься. Когда событие привязывается с помощью
bind
, (или, в данном случае,click
), контекст устанавливается на «привязанный» элемент, поэтомуthis
ссылается на span, а не на объект window. Если вы все еще не согласны, просто попробуйте код в вашем браузере.5. Blender, смешивание атрибутов html и javascript является навязчивым, и оно устарело с уровня DOM 2. Написание ненавязчивого кода — лучшая практика (более управляемый, большее разделение и т.д.) В Интернете много информации, вот одну , которую вы можете поискать о «ненавязчивом javascript» для получения дополнительной информации