Любой способ передать параметры программно в функцию onclick? - PullRequest
0 голосов
/ 26 апреля 2010

У меня есть функция onclick, которая выполняет несколько задач. В другой функции JavaScript у меня нет доступа к контекстным переменным, необходимым для выполнения этих задач. Чтобы обойти это, я просто вызываю функцию onclick напрямую.

Проблема, с которой я столкнулся сейчас, заключается в том, что я хотел бы выполнить задачу после завершения действия Ajax в onclick. Можно ли как-нибудь передать функцию методу onclick ссылки? Как будет выглядеть атрибут onclick?

например. как то так:

<a id="link3" href="javascript:void(0);" onclick="function(callback) { X(a); Y(b); Z(c, callback); };">click me</a>

Нажатие на это передаст "undefined" в качестве обратного вызова, в то время как я мог бы также вызвать его явно так:

document.getElementById("link3").onclick(function() { alert("Completed all tasks"); } );

Возможно ли что-то подобное? По сути, я хочу иметь возможность передавать необязательный параметр в метод onclick, но если он отсутствует, я хочу, чтобы он вел себя так, как если бы в onclick был только процедурный код.

РЕДАКТИРОВАТЬ: Добавлено больше подробностей

Вариант использования: onclick вызывает функцию поиска, для которой требуются переменные сеанса. Когда выполняются регулярные поиски, проблем нет, но когда я хочу обновить результаты поиска (например, когда пользователь редактирует или удаляет один из возвращенных результатов), мне нужно вызвать ту же функцию поиска, которая была вызвана ранее, а затем распечатать сообщение обратной связи после обновления. Этот вывод сообщения обратной связи - это то, что я хотел бы использовать в методе обратного вызова. Я также хотел бы установить в window.location.href страницу вниз к соответствующей строке в случае редактирования или вставки.

У меня есть доступ к нескольким переменным на стороне сервера, которые я распечатываю непосредственно в атрибуте onclick при рендеринге страницы. В других файлах Javascript, которые я включаю на своей странице, я также хотел бы иметь возможность выполнять те же функции, которые содержатся в onclick. Единственная проблема в том, что мне пришлось бы передавать все эти переменные этим функциям косвенно через несколько промежуточных методов в цепочке вызовов.

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

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Хотя это может быть как-то возможно, я бы порекомендовал не добавлять аргументы в собственные события DOM.

Я тоже не вижу в этом реальной архитектурной необходимости. Можете ли вы привести полный пример варианта использования, где вам это нужно? Я почти уверен, что кто-то может предложить альтернативное решение, которое не требует дополнительных аргументов.

Не является ли в вашем примере правильным местом для размещения alert обратного вызова success запроса Ajax?

0 голосов
/ 07 мая 2011

Это работает для меня:

<body onload="f = document.getElementById('link3').onclick; f(function(){alert('Completed all tasks')});">
<input id="link3" type="button" onclick="alert(typeof(arguments[0])); arguments[0]()">
</body>

Первая директива возвращает «функцию», а вторая возвращает «Завершенные все задачи», как и ожидалось. В вашем случае должно работать следующее:

<input id="link3" type="button" onclick="X(a); Y(b); Z(c, arguments[0]);">
...