我希望获得此输入的值,如果它发生变化。我有一个map.swf,它根据用户在.swf中选择的内容来改变值,所以我想知道如何完成这项工作。
<a href="map.php" onclick='return GB_showCenter("",this.href,380,780);' class="page">See Map</a>
<input name="sector_e" type="text" id="sector_e" value="Please click The Map" size="1" readonly>
如果我按一个键,这个jQuery只会提醒我,我希望它在没有任何事件的情况下更改值时发出警报。
$('#sector_e').bind("keyup", function() {
alert($(this).val());
});
答案 0 :(得分:2)
事件“改变”应该做你想做的事情:)
$('#sector_e').bind("change", function() {
alert($(this).val());
});
编辑: 为了使其工作,swf还必须触发change事件。
如果无法做到这一点,您可以每隔n毫秒检查一次值是否有变化,并在这种情况下触发更改事件。
var checkChange function($object){
var currentValue = $object.val();
var checkChanges = function() {
if (checkChanges.val() != currentValue) {
currentValue = checkChanges.val();
$object.trigger("change");
}
}
window.setInterval(checkChanges, 100);
}
checkChange($('#sector_e'));
答案 1 :(得分:1)
你需要做一些事情的组合:
data
命令功能来保存初始值。focusout
或blur
或change
事件检查当前值与使用data
保存的内容。即使您选择,也取决于是否可以直接进行用户交互。一旦检测到更改,就可以进行进一步处理。
例如:
您可以考虑使用jQuery的addClass
命令将该元素标记为类似“isDirty”的类。
然后你可以做以下事情:
$('.isDirty')
与此同时......
这是使用FOCUSOUT的代码示例:
<script type="text/javascript">
$(document).ready(function () {
var txtSectorE = $('#sector_e');
// Save the initial value
$.data(txtSectorE, "last", txtSectorE.val());
// Setup the event
txtSectorE.focusout(function () {
var last = $.data(txtSectorE, "last");
if (last != $(this).val())
alert("changed");
});
});
</script>
<input id="sector_e" name="sector_e" type="text" value="Please click The Map">
当然,这样做是很费劲的,因为你必须为每个textbox
写一套单独的电话。
那么,为什么不为每个textbox
添加一个类名,并这样做......
使用FOCUSOUT更好的例子:
<script type="text/javascript">
$(document).ready(function () {
var txtSectors = $('.sector');
$.each(txtSectors, function (index, textbox) {
// Save the initial value
$.data(textbox, "last", textbox.val());
// Setup the event
textbox.focusout(function () {
var element = $(this);
var last = $.data(element, "last");
if (last != element.val())
alert("changed");
});
});
});
</script>
<input id="sector_a" type="text" class="sector" value="Something">
<input id="sector_b" type="text" class="sector" value="Another">
<input id="sector_c" type="text" class="sector" value="Yet Again">
<input id="sector_d" type="text" class="sector" value="Wow This Arduous">
<input id="sector_e" type="text" class="sector" value="Getting Tired Of Typing">
答案 2 :(得分:0)
如果文本输入的值发生更改(通过SWF或JS)时没有触发事件。 解决方案是使用计时器来不断检查文本输入的值。如果它不同于先前存储的值已经改变,那么你可以做你的事情。
(远非最佳但是解决方案)
setInterval( function() {
$('input').each( function() {
if ($(this).val() != $(this).data("_value")) {
// Save the new value
var myVal = $(this).val();
$(this).data("_value",myval);
// TODO - Handle the changed value
}
});
}, 100);
来自@Plutor