Как заставить jquery $ (this) работать в функции, которой должны передаваться переменные?

#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» для получения дополнительной информации