Проблема с регистрацией инструкции onsubmit для расширенного управления кнопками

StackOverflow https://stackoverflow.com/questions/1780156

  •  21-09-2019
  •  | 
  •  

Вопрос

Привет, я недавно влюбилась в расширенное управление кнопкой загрузки Я нашел здесь который при использовании вместе с элементом управления загрузкой файлов 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()" />
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top