2012-01-27 4 views
2

変更があればこの値を取得します。私は.swfでユーザが選択したものに応じて値を変更するmap.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()); 
}); 
+1

を私はあなたが何を意味わかりません'イベントなし'。値が変わると、イベントなしでどのように知っていますか? – Magrangs

+0

ここに、前の質問からのいくつかの解決策があります:http://stackoverflow.com/questions/5349504/jquery-onchange-detection – jdh

+0

これらの回答の1つが機能する場合、答えの横にあるチェックボックスを必ずマークしてください。 –

答えて

1

からあなたは物事の組み合わせを実行する必要があります。

  1. jQueryのdataコマンド機能を使用して、初期値を保存します。
  2. jQueryのfocusoutまたはblurまたはchangeイベントを使用して、現在の値をdataを使用して保存されている値と比較します。

どちらを選択するかは、直接的なユーザー対話が可能かどうかによって異なります。変更を検出すると、さらに処理が行われます。例えば


あなたはjQueryのaddClassコマンドを使用して「isDirty」のようなクラス名を持つ要素をマーキング考えるかもしれません。もちろん

<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"> 

、やって:HERE

がFOCUSOUTを使用してコードサンプルである...ところで

$('.isDirty') 

次に、あなたのようなものを行うことができますこの方法では、それぞれtextboxの別々の呼び出しを書く必要があるため、課税されます。だから、

、なぜ各textboxにクラス名を追加し、それをこのようにしない... FOCUSOUT使用した

BETTER例:

<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

イベント「変更」あなたは:)やりたいはずです

$('#sector_e').bind("change", function() { 

      alert($(this).val()); 

    }); 

編集: は、この作業を行うには、swfファイルも変更イベントをトリガする必要があります。

これが不可能な場合は、値が変更されている場合は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')); 
+2

値がコードで設定されていれば、それは何もしません。彼はイベントを引き起こさなければならないでしょう。 – canon

+0

ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ、 – Ered

+0

ええ、そうです... swfは変更イベントをトリガして動作させる必要があります。 – arthur

0

テキスト入力の値が変更されたときにトリガーされるイベントがない場合(SWFまたはJS経由)。 解決策は、タイマーを使用してテキスト入力の値を常にチェックすることです。それ以前に保存されていた値と異なる場合は、変更されていますし、あなたのことをすることができます。

(ファー最適が、溶液から)

実装のためにここを参照してください:I want to trigger an event every single time data changes in an HTML text input field regardless of focus

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

関連する問題