Вызов функции jQuery без элемента - PullRequest
0 голосов
/ 17 мая 2010

Итак, я довольно широко использую jQuery и хорошо знаю «правильный» способ сделать следующее, но бывают случаи, когда я хочу решить его более общим способом.Я объясню.

Итак, у меня может быть ссылка, например: <a href='menu' class='popup'>Show menu</a>.Теперь у меня есть функция jQuery, которая запускается при нажатии для всех a.popup, который принимает атрибут href и показывает элемент <div id='menu'></div> (в данном случае).Он также обрабатывает URL-адреса, если не может найти элемент DOM с этим идентификатором.

Здесь нет проблем.Но бывают случаи, когда у меня нет одинакового контроля над коэффициентом, когда я могу создать выбираемую цель таким образом.Либо потому, что код не создан мной, либо потому, что он создан с помощью цепочки функций, для которых всем понадобится огромный код, который я не буду делать.

Итак, время от времени я хотел бычтобы иметь этот код:

<a href="javascript:popup('menu')">Show menu</a>

Это было бы в случае, когда я могу предоставить только метку и HREF для ссылки.Нет класса, нет ничего.

Проблема здесь в том, что функция popup () не имеет представления о том, какой элемент вызвал ее, и в большинстве случаев это не проблема для меня, поскольку мне нужно только знать, где находится мышькурсор был при вызове.

Но в некоторых случаях я использую другие функции jQuery, например qTip или что-то еще.так что я все еще хочу запустить qTip ();при нажатии на ссылку, которая запускает эту функцию JS, но к чему мне ее прикрепить, чтобы она показывалась?Я не могу просто прогнать $ (). QTip ();потому что это подразумевает, что $ (this) и «this» не определены внутри функции.

Так как мне это сделать?Есть идеи?

Ответы [ 3 ]

1 голос
/ 18 мая 2010

Вместо того, чтобы ссылаться на "this", попробуйте обратиться к $('a:focus') для ссылки на ссылку, по которой щелкнули.

Вот быстрый и, как добавил бы @Crescent Fresh, грязный (☺) пример:

<body>
<p><a href="javascript:popup('menu')">Show popup()</a></p>
<div id="menu" style="display:none">Today's menu</div>

<script type="text/javascript">
function popup(elm) {
    $('#' + elm).show();
    alert( $('a:focus').text() )
}
</script>
</body>

Я попробовал просто ":focus", но IE7 вернул слишком много контента. Я проверил это в FF 3.6.3, IE7, Chrome 4.1.249.1064 (все в Windows) и, кажется, все в порядке, но теперь я вижу (когда я только собирался нажать «Опубликовать свой ответ») это зависит от встроенной поддержки браузера для querySelectorAll - см. этот пост на форуме jQuery ": фильтр селектора фокуса? " и запись jQuery.expr в jQuery Source Viewer (где, по-видимому, идея Пола не была реализована) .

1 голос
/ 18 мая 2010

Как насчет

<a href="javascript:popup(event, 'menu')">Show menu</a>

После того, как вы получили объект события, вы можете сделать с ним практически все.

1 голос
/ 17 мая 2010

Есть ли способ изменить javascript на javascript:popup('menu', this);? Я успешно использовал этот метод много раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...