Проблема с регистрацией инструкции onsubmit для расширенного управления кнопками
Вопрос
Привет, я недавно влюбилась в расширенное управление кнопкой загрузки Я нашел здесь который при использовании вместе с элементом управления загрузкой файлов aspnet может выполнять загрузку в стиле gmail.Единственная проблема заключается в том, что когда элемент управления размещается на странице любая кнопка на этой странице вызовет событие click расширенного элемента управления.
Я понятия не имел, почему это происходит, пока не взглянул на исходный код.
/// Basic registration of events
protected override void OnInit(EventArgs e)
{
this.Page.LoadComplete += new EventHandler(Page_LoadComplete);
base.OnInit(e);
this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "ScriptBlock", this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "WebControls.JScripts.AIMScript.js"));
string cid = this.ClientID;
string onsubmitstatement = "return AIM.submit( document.forms[0], {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})";
this.Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "OnSubmitScript", onsubmitstatement);
}
Из того, что я могу понять, проблема заключается в элементе управления, регистрирующем "о подаче заявления' для всех элементов управления на страницах формы, т.е 'документ.формы[0]'.Сейчас у меня очень ограниченный опыт создания пользовательских элементов управления, поэтому все мои попытки зарегистрировать 'onsubmitstatement' только для элемента управления загрузкой потерпели неудачу, например
string ctrlid = this.ClientID
string onsubmitstatement = "return AIM.submit( document.getElementById('" + ctrlid + "'), {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})";
кто-нибудь может мне помочь?Есть ли способ зарегистрировать функцию onsubmit только для этого элемента управления ?
Решение
Нам нужно было бы знать, что именно AIMScript.js на самом деле делает, чтобы действительно ответить на вопрос.
Основная идея, однако, заключается в том, что вам нужно изменить javascript, чтобы он выполнял свою работу в событии click для конкретной кнопки, а не перехватывал событие submit для всей формы.Но вполне возможно, что этот конкретный javascript может зависеть от элемента form и некоторыми другими способами.
Это может быть так же просто, как изменить регистрацию, чтобы просто зарегистрировать функцию javascript doClick следующим образом:
string onsubmitstatement = "function DoClick() {return AIM.submit( document.forms[0], {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})}";
this.Page.ClientScript. RegisterClientScriptBlock(this.GetType(), "OnSubmitScript", onsubmitstatement);
Затем, перейдя к фактическому управлению кнопкой, подключите ее для вызова новой JavaScript-функции doClick (), которую вы зарегистрировали выше, - вот так:
<input type="button" value="ClickMe" onclick="DoClick()" />