0

私のコメントに対するアンドリューの答えは、この質問を引き起こしました。

上記のリンクの彼の素晴らしい答えによると、質問の下部にあるコードは1つのウィジェットでのみ機能します。しかし、それはキラーな素晴らしいコードであり、理にかなっています...私は両方の世界の長所が欲しいと思います。ニースJS、(可能であれば)そしてゼロの結果を得るshow()には、その時点で使用している要素だけを使用します。

このコードスニペットは、私が見ているように、私の問題の主な核心です。

        ソース:関数(要求、応答){
        jQuery.ajax({
            url: "/ autocomplete.json"、
            データ: {
            用語:request.term
            }、
            成功:関数(データ){
            if(data.length == 0){
        jQuery('span.guest_investor_email')。show();
                jQuery('span.investor_field_delete_button')。show();
            }
            response(data);
            }
        });

現在:

ページに「情報を追加」というボタンがあり、クリックするたびに、オートコンプリートテキストフィールドの新しいインスタンスが表示され、いくつかの非表示フィールドとdisplay:none;オンが表示されguest_investor_emailます。オートコンプリートテキストフィールドを3回使用し、ページに3つのオートコンプリートインスタンスがあり、3番目のインスタンスで0の結果が見つかった場合:コードは、空白の1つguest_investor_emailだけではなく、テキストフィールドの3つのインスタンスすべてをshow()します。 this

質問:

どうすれば jQuery(this).siblings(('span.guest_investor_email').show();仕事のようなものを手に入れることができますか?

thisはオブジェクトであり、選択する要素の配列ではありません。それがない場合、this私がそれを取得する方法を知っている限り、私は気にしません。ありがとう。


完全なコード:

     jQuery( "。auto_search_complete")。live( "click"、function(){
     jQuery(this).autocomplete({
        minLength:3、

        ソース:関数(要求、応答){
        jQuery.ajax({
            url: "/ autocomplete.json"、
            データ: {
            用語:request.term
            }、
            成功:関数(データ){
            if(data.length == 0){
        jQuery('span.guest_investor_email')。show();
                jQuery('span.investor_field_delete_button')。show();
            }
            response(data);
            }
        });
        }、

        フォーカス:function(event、ui){
        jQuery(this).val(ui.item.user?ui.item.user.name:ui.item.pitch.name);
        falseを返します。
        }、
        選択:function(event、ui){
        jQuery(this).val(ui.item.user?ui.item.user.name:ui.item.pitch.name);
        jQuery(this).siblings('div.hidden_​​fields')。children('。poly_id')。val(ui.item.user?ui.item.user.id:ui.item.pitch.id);
        jQuery(this).siblings('div.hidden_​​fields')。children('。poly_type')。val(ui.item.user? "User": "Pitch");
        jQuery(this).siblings('span.guest_investor_email')。hide();
                jQuery(this).siblings('span.investor_field_delete_button')。show();
                jQuery(this).attr('readonly'、'readonly');
                jQuery(this).attr('id'、 "投資家が選択しました");

        falseを返します。
        }
    })。each(function(){
        jQuery(this).data( "autocomplete")._ renderItem = function(ul、item){
        jQuery("を返す
  • ") .data( "item.autocomplete"、item) .append( "

    "+(item.user?item.user.name:item.pitch.name)+"
    "+(item.user?item.user.investor_type:item.pitch.investor_type)+"-" +(item.user? item.user.city:item.pitch.city)+ "

    ") .appendTo(ul); }; }); });
    4

    1 に答える 1

    1

    何を達成したいのかよくわかりませんでしたが、.liveイベントをバインドする要素を正しく取得したいと思いますか?

    jQuery(".auto_search_complete").live("click", function() {
        var $this = $(this);
        jQuery(this).autocomplete({
            minLength: 3,
            ...
            success: function (data) {
            if (data.length == 0) {
        jQuery('span.guest_investor_email').show();
                $this.siblings('span.investor_field_delete_button').show();
            }
        ...
    
    于 2012-05-30T14:47:07.570 に答える