2016-11-22 12 views
1

すべての注文をシステムに出力し、すべてのリンクにカスタム属性oid(order-id)を追加するPHPファイルがあります。私は私はこれがPHP jQuery HTML - カスタムHTML属性を取得する

<a href='#' class='completeOrder' oid='8'>Un-completed</a> 

私は何をしたいのは、このリンクがクリックされたときで、チェックボックスを持つフォームを起動得る要素を検査しないときに正しいHTMLを与える

<a href='#' class='completeOrder' oid='$order_id'>$status</a> 

、:私のリンクは次のようになり正しい注文IDの送信ボタンをHTMLで送信します。したがって、フォームと注文IDを別のPHPファイルに送信して処理することができます(この場合、注文ステータスを更新します)。 jQueryのAJAX呼び出しを使用している私は、チェックボックスでフォームを起動するためにやっている

、私はIDを確認するために警告しようとjQueryのOIDを得た場合、正しくそれは...その未定義私に語った:

あなたの関数で利用可能な thisgetCompleteOrderTools thisご希望のリンクのクリックイベントのために参照してくださいしたかったということに異なっているよう
$("body").delegate(".completeOrder", "click", function(event) { 
    event.preventDefault(); 
    getCompleteOrderTools(); 

    $(".content").toggleClass("hidden"); 
    $('div.hidden').fadeIn(800).removeClass('hidden'); 
    $("#notifications-drop").toggleClass('hidden'); 
}); 

function getCompleteOrderTools() { 
    var o_id = $(this).attr('oid'); 
    alert(o_id); 

    $.ajax({ 
     url: "action.php", 
     method: "POST", 
     data: { 
      getCompleteOrderTools: 1, 
      orderId: o_id 
     }, 
     success: function(data) { 
      $(".row").append(data); 
     }, 
    }); 
} 
+0

jqueryバージョン??? –

+0

HTMLのカスタム属性が無効であることに注意してください。カスタムメタデータを要素に格納する場合は、代わりに 'data- *'属性を使用してください。また、 'delegate'はa * long * time前に廃止されました。 jQueryのバージョンを更新して、代わりに 'on()'を使用する必要があります –

+0

本当ですか?製品の部分では、私はpid = product_id ..を設定することができ、同じテクニックを使用していたので機能しましたか? –

答えて

0

あなたの主な問題は、あなたが間違ったコンテキストでthisを参照しているということでした。

あなたは2つのオプションがあります:

のいずれかを使用しjQuery(this).attr('oid');

それとも

<a href='#' class='completeOrder' data-oid='$order_id'>$status</a>

jQuery(this).data('oid');

属性 data

使用jqueryの

だから、.attrとあなたのコードは次のようになります。jQueryオブジェクトがあなたの関数に渡されていない

$("body").delegate(".completeOrder", "click", function(event) { 
    event.preventDefault(); 

    var myThis = $(this);//This is the 'this' corresponding to the link clicked 

    getCompleteOrderTools(myThis); 

    $(".content").toggleClass("hidden"); 
    $('div.hidden').fadeIn(800).removeClass('hidden'); 
    $("#notifications-drop").toggleClass('hidden'); 
}); 

function getCompleteOrderTools(myThis) { 

    var o_id = myThis.attr('oid'); 
    alert(o_id); 

    $.ajax({ 
     url: "action.php", 
     method: "POST", 
     data: { 
      getCompleteOrderTools: 1, 
      orderId: o_id 
     }, 
     success: function(data) { 
      $(".row").append(data); 
     }, 
    }); 
} 
0

。あなたは、次の操作を行う必要があります。

$("body").delegate(".completeOrder", "click", function(event) { 
    event.preventDefault(); 
    getCompleteOrderTools(jQuery(this)); 

    $(".content").toggleClass("hidden"); 
    $('div.hidden').fadeIn(800).removeClass('hidden'); 
    $("#notifications-drop").toggleClass('hidden'); 
}); 

function getCompleteOrderTools(_this) { 
    var o_id = _this.attr('oid'); 
    alert(o_id); 

    $.ajax({ 
     url: "action.php", 
     method: "POST", 
     data: { 
      getCompleteOrderTools: 1, 
      orderId: o_id 
     }, 
     success: function(data) { 
      $(".row").append(data); 
     }, 
    }); 
} 

あなたの関数にjQuery(this)を渡すことによって、あなたは今、あなたのクリックイベントからjQueryオブジェクトへのフルアクセスを持っています。

関連する問題