#javascript #asp.net
#javascript #asp.net
Вопрос:
У меня есть текстовое поле asp.net управление сервером. Я изменяю значение текстового поля из javascript, я хочу определить, когда текст текстового поля изменяется. Я попробовал событие onchange, которое вызывается при потере foucs при изменении текста. Но в моем случае я изменяю текст из Javascript. как я могу этого добиться?
Ответ №1:
Обновление value
свойства не вызовет событие изменения. Событие изменения инициируется пользователем.
Вы можете либо написать функцию, которая изменяет значение и делает все остальное, что вам нужно сделать…
function changeTextarea(str) {
document.getElementById('a').value = str;
// Whatever else you need to do.
}
…или опросить textarea
значение ‘s…
(function() {
var text = getText();
var getText = function() {
return document.getElementById('a').value;
}
setInterval(function() {
var newtext = getText();
if (text !== newText) {
// The value has changed.
}
text = newText;
}, 100);
})();
…или явно вызовите onchange()
событие самостоятельно.
document.getElementById('a').onchange();
(Предполагая, что вы настроили событие с onchange
свойством.)
Обходные пути не являются очень хорошими решениями. В любом случае, вам необходимо выполнить некоторое вмешательство, чтобы запустить дополнительный код при обновлении textarea
value
свойства.
Комментарии:
1. @Потому что это с помощью jQuery, о котором OP никогда не упоминал. Вы также явно вызываете
change()
, что в основном и есть то, что я предложил в своем ответе.2. @Потому что jQuery написан на JavaScript? Действительно?
3. 1 за то, что не просто даешь ответ на jQuery. В любом случае, я думал, что jQuery был написан с использованием unicorn dust и pixie cake. Каждый день узнаешь что-то новое.
4. @Alex. Я хочу сказать, что если OP уже использует javascript, нет никаких препятствий для включения и использования jquery. Это, конечно, в ответ на ваш комментарий о том, что OP никогда не упоминает jQuery, как будто между javascript и jquery существует огромная пропасть. Я нахожу интересным, что вы так значительно расширили свой первоначальный ответ с «Вы не можете … если только …» до полезного ответа. Теперь у OP есть несколько вариантов решения.
5. @ Потому что я только что прояснил моменты в своем ответе. Добавление jQuery тривиально для реализации, но есть веские причины, покоторым кто-то может не захотеть.
Ответ №2:
Вы могли бы принудительно выполнить обратную отправку из javascript и, следовательно, вызвать событие перезагрузки страницы. На странице.GetPostBackEventReference() вы можете обработать событие и, возможно, запустить какое-либо другое событие.
Это не очень хорошее решение, и я искренне рекомендую вам делать все это через javascript или отбросить javascript и разрешить .В СЕТИ было все, возможно, с Ajax.NET
Следующая ссылка объясняет, как вы делаете это для обычной кнопки, но это не должно быть сложно сделать для события onchange.
Ответ №3:
Используя Jquery, вы можете назначить обработчик ‘change’ и вызвать обработчик следующим образом:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
//makes 'DetectChange' the handler when TextBox1 changes...
$('#TextBox1').change(function () {
DetectChange();
});
});
function DetectChange() {
alert("TextBox1 has been changed");
}
function ClickTheButton() {
// .val actually 'changes the value'
// while you have to add .change() to invoke the actual change event handler...
$('#TextBox1').val("Changed When Button Clicked").change();
//return false prevents the click event of the button from doing a post back
//keeping everything on the client for this sample..
return false;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<input id="Button1" type="button" value="Change TextBox1" onclick="return ClickTheButton();" />
</div>
</form>
</body>
</html>
Комментарии:
1. Почему бы вам напрямую не перейти
DetectChange
кclick()
методу?2. @Alex OP утверждает
But in my case i an changing text from Javascript
поэтому я использовал событие нажатия кнопки для имитации этого элемента сценария. Я не знаю, «что» использует javascript OP или как он вызывается, поэтому я просто создал демо, которое делало бы что-то подобное. Вы правы, что.change
может быть вызвано щелчком мыши, и если это соответствует потребностям OP, тогда отлично.
Ответ №4:
Если бы вы могли использовать jQuery, это было бы что-то вроде этого
$('#id_of_text_area').change(function(){
//do something
});