Запустить событие asp:button click, используя JavaScript
В настоящее время я работаю над проектом, который должен вызвать событие нажатия кнопки asp: после выполнения серии событий в коде JavaScript.
Пожалуйста, смотрите мои коды ниже:
Это моя кнопка, и это событие клика:
<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Text="btnRefresh" onclick="btnRefresh_Click" />
protected void btnRefresh_Click(object sender, EventArgs e)
{
MyGrid.DataSource = null;
MyGrid.DataSource = GetDataForGrid();
MyGrid.DataBind();
}
Я ссылался на файл javascript, который содержит все мои коды javascript для страницы. Я делаю это таким образом, поскольку мне не очень нравится смешивать мой код JavaScript в моем файле.aspx.
Вот как выглядит функция в моем внешнем файле.js:
function Refresh() {
var btn = $(document).getElementById('btnRefresh');
if (btn) {
btn.click();
}
else {
alert('false');
}
}
Я также попробовал другие способы, которые я видел в Интернете, следующим образом, но все безуспешно:
document.getElementById('btnRefresh');
__doPostBack('btnRefresh', '');
__doPostBack('btnRefresh', 'Click');
$('#btnRefresh').click();
Может кто-нибудь указать мне хороший способ сделать это? Спасибо!
РЕДАКТИРОВАТЬ:
Я хочу сделать следующее: у меня есть сетка внутри UpdatePanel. У меня есть триггер, который срабатывает при нажатии btnRefresh. Таким образом, в основном, это освежает мой gridview. Поэтому я не могу использовать свойство OnClick кнопки для вызова моих функций JavaScript, поскольку я не буду нажимать кнопку в первую очередь. Я должен быть в состоянии позвонить btnRefresh_Click
событие из моего внешнего JavaScript, чтобы мой триггер был запущен для обновления моего GridView.
РЕДАКТИРОВАТЬ 2:
Я пытался определить мой btn
на странице.aspx, используя строку ниже:
var btn = $ ("#");
и я также изменил свой код JS следующим образом:
function Refresh () {if (btn) {btn.click (); } else {alert ('false'); }}
JS смог увидеть btn
и это событие прошло через линию btn.click()
Тем не менее, мой btnRefresh_Click
все еще не загорелся. Я что-то здесь упускаю?
5 ответов
Поскольку вы ссылаетесь на свой файл JS, у вас есть два варианта. либо пройти в пуговицу ClientID
или установить кнопки ClientIDMode
в Static
,
Я предлагаю вам передать идентификатор функции JS.
function Refresh(id) {
var btn = $(document).getElementById(id);
if (btn) {
btn.click();
}
else {
alert('false');
}
}
Если вы хотите вызвать его в другой функции JS, передайте ClientID
,
function doSomthing(){
//do this
//do that
Refresh('<%=btnRefresh.ClientID%>');
}
Но, как вы сказали, если вы не хотите помещать JS на страницу aspx, просто установите кнопки ClientIDMode = Static
,
<asp:Button ID="btnRefresh" ClientIDMode="Static" name="btnRefresh" runat="server" Text="btnRefresh" onclick="btnRefresh_Click" />
Вот "взлом", который я использовал в прошлом
Кнопка, которая видна клиенту будет
<input type="button" id="btPart1" value="Trigger Phase 1"
onclick="clicked()" class="btn btn-default" />
Определите кнопку как это в вашей веб-форме
<asp:button id="Triggered" runat="server" OnClick="btnRefresh_Click"
Style="visibility: hidden;"/>
В вашем JavaScript вы бы
function clicked(){
document.getElementById("ctl02_Triggered").click();
}
В зависимости от того, какую версию asp вы используете, идентификатор будет меняться, поэтому убедитесь, что вы проверили фактический идентификатор кнопки, чтобы ее можно было вызвать с помощью js. Я упоминаю об этом, потому что во время компиляции ASP фактически преобразует данные, которые вы дали, исходя из того, какие у него есть родители.
Здесь вы можете использовать свойство OnClientClick и указать имя функции, которая должна вызываться во внешнем js, так как это свойство фактически выполняется перед выполнением события на стороне сервера.
Посмотрите на ClientID
Имущество.
Вы можете использовать свойство для получения идентификатора кнопки на стороне клиента и использовать идентификатор для запуска клика.
function Refresh() {
var btn = $("#<%=btnRefresh.ClientID%>");
if (btn) {
btn.click();
}
else {
alert('false');
}
}
Но помните, что <%=btnRefresh.ClientID%>
может работать только на той же странице, что и btnRefresh
, не во внешнем файле JS. ClientID динамически генерируется ASP.NET.
На самом деле вы должны убедиться, что DOM загружен, прежде чем запускать какие-либо методы JS. Поэтому убедитесь, что ваш файл js включен в конец вашей DOM (html).
поскольку btnRefresh
Кнопка управления сервером, вам нужно отослать ее по clientID
в Refresh
метод,
var btn= document.getElementById(‘<%=btnRefresh.ClientID=%>’);
Но ваш код не показывает, как вы вызываете Refresh
метод. Надеюсь, что выше поможет вам. ИЛИ вам нужно показать больше кода.