1

フォームに1つ以上の行があるテーブルがあり、各行には、次のように、含むのIDを含むonchangeハンドラーを持ついくつかの<select>フィールドとフィールドが含まれています。<input>tr

<select id="System_row_0_environment" class="fixedwidth" 
  onchange="changeAccessSystem('System_row_0', 'environment')" name="System_environment">

行の1つを複製し、IDとonchangeハンドラーの呼び出しを更新したいと思います。(idGlobは、行数のカウントを持つグローバル変数です)

function cloneLine(previd) {
  var id = '<% $prefix %>_row_' + idGlob;
  idGlob++;

  var $prevLine = jQuery('#' + previd);

  var prevId = $prevLine.attr('id');

  var regExp = new RegExp(prevId, 'g');

  var replaceIdFunction = function(row, attr) {
    if (attr) {
      return attr.replace(regExp, id);
    }
  };

  var $newLine = $prevLine.clone();
  $newLine.attr('id', id).find('*').each(function(index, element) {
     jQuery(element).attr(
     {
        'id': replaceIdFunction,
        'onchange' : replaceIdFunction,
        'for' : replaceIdFunction,
        'onclick' : replaceIdFunction
     })
  });

  // XXX This is a work-around for a bug in Firefox.  Clone is supposed to
  // copy the value, but it doesnt for select and textarea!
  // https://bugzilla.mozilla.org/show_bug.cgi?id=230307
  $prevLine.
    find('select,textarea').each(function(index, element) {
        var $element = jQuery(element);
        var name = $element.attr('name');
        $newLine.find('[name="' + name + '"]').val(
            $element.val());
    });

  $prevLine.after($newLine);
}

これはすべての通常の容疑者(Chrome、Firefox、Safari)でうまく機能しますが、IEでは奇妙な理由でFirebug Liteで要素を検査し、クローンが持っていることを示していてもonchange="changeAccessSystem('System_row_1', 'environment')、変更するとchangeAccessSystem関数が呼び出されます最初の引数は「System_row_0」です。.clone私が電話するtrueかどうかは関係ないようですfalse

4

1 に答える 1

1

私の前にIEでこのような問題がありました。私が見つけた2つの解決策。まず、選択したインラインの「onchange」イベントから関数を削除します。代わりに、jQuery/JavaScriptを使用してイベントを追加してください。そのような:

$("select").change(function(e) { // do work ....

次に、古いIEでは、change/onchangeイベントが正しく発生しません。したがって、「propertychange」イベントを巧みに処理する必要があります。そのようです:

$('select').bind($.browser.msie ? 'propertychange': 'change', function(e) { // do work

もちろん、その後、イベント関数で関数を呼び出し、バインドされたイベントを呼び出している要素に基づいて、必要に応じてパラメーターを設定できます。特定のカウントが必要な場合、または特定の行番号の親trインデックスを取得する場合など、.eachを使用することもできます。

これがお役に立てば幸いです。さらに例が必要な場合は、コメントでこの投稿をヒットしてください

于 2012-10-02T17:51:32.517 に答える