0

まず、何時間も探していたので、このような問題が発生した場合は申し訳ありません。私の問題を我慢してください。詳しく説明しましょう。7465768574 のような単純な 10 桁の電話番号として "value" 属性を持つ select 要素にオプションを動的に追加しています。ユーザーが選択すると、ユーザーが選択したオプションを表示するために順序付けられていないリストに追加されます。そのリスト項目を削除するために、最初にクリックすると選択要素に対応するオプションがあることを確認し、次に同じリスト項目を順不同リストから削除し、選択要素から対応するオプションを削除する画像を提供しました。今、これを達成するために、「値」属性をチェックしています。問題はその value 属性が電話番号のような大きな数字の場合、jQueryはその値を適切に抽出できないため、私のロジックは失敗します。その非常に大きな数の場合は 0 を返し、6,000,000,000 から 7,000,000,000 の範囲内の何か (コンマが値に含まれていない) の場合、乱数を返します。何が問題なのかわからない。値の型と何か関係がありますか。

<select multiple="multiple" id="select1">  
     <option class="selectedoptions" value="8234567890">Joker(8234567890)</option>  
     <option class="selectedoptions" value="2">Batman(2)</option>  
     <option class="selectedoptions" value="3">Superman(3)</option>  
     <option class="selectedoptions" value="4">Spiderman(4)</option>
     <option class="selectedoptions" value="5">Ironman(5)</option> 
     <option class="selectedoptions" value="6">Thor(6)</option> 
     <option class="selectedoptions" value="7">Loki(7)</option>
</select>  

私のjQueryコードは

        function removeSelected() {
            var check = $(this).parent().attr('value');
            var parent = $(this).parent();
            $('#select2 option').each(function () {
                if ($(this).attr('value') == check) {
                    $(this).remove().appendTo('#select1');
                    parent.remove();
                    return true;
                }
                return true;
            });
            return true;
        }

このコードを FireBug でデバッグすると、より大きな数値の場合、「チェック」が 0 であり、8,000,000,000 未満の範囲では乱数が返されることがわかります。少数の場合、完全に機能します。

また、.attr('value') の代わりに .val() を試すと、firebug のエラーが表示されます

TypeError: (c.value || "").replace is not a function

よろしくお願いします。

編集1:わかりました。リスト項目を動的に追加している私のjQueryコードは、リスト項目の値として乱数を導入しているようです。しかし、問題は同じままです。リスト アイテムの作成中にコードが (firebug を介して) 適切な値を追加しているのを確認できますが、生成されたリスト アイテムにはそれが反映されません。

編集 2: ronalchn 氏に応えて。ごめんなさい。コンテキストが必要です。私が持っているものは次のとおりです。2 つの select 要素 "select1" & "select2" & 順序付けられていないリスト "selectedlist"。ユーザーは「select1」からオプションを選択し、「select2」に移動できます。& 「select2」オプションは、「selectedlist」のリスト項目として反映されます/反映されるべきです。リスト項目内の画像にバインドされた関数 removeSelected があります。

<li class="selectedlistItems" value="8123456789">
Joker(8123456789)
<a class="search-choice-close" href="#"> </a>
</li>

現在、関数で「select2」のオプションを反復処理し、そのオプションのどれがこのリスト項目と同じ値を持っているかを確認しようとしています。「チェック」はリスト項目の「値」です &

$(this).attr('value')

「select2オプション」値です。一致する場合

$(this).remove().appendTo('#select1');

「select2オプション」を削除して「select1」に追加します。

parent.remove();

順序付けられていないリストが常に「select2」要素を反映するように、リスト項目を削除します。

このコンテキストは、私がやろうとしていることを理解するのに十分だと思います。私はjqueryが初めてで、一般的に質問を投稿します。答えを見つけるだけです。これは私の最初の質問です。このような迅速な対応にはすでに感謝しています。

EDIT 3 : この jsFiddle を確認して、状況を理解してください。http://jsfiddle.net/ygaurav/vUgym/

4

2 に答える 2

0

これは、要素の'value'プロパティに割り当てるときに、これが型であるためです。そのため、オーバーフローが発生し、ガベージ値が返されます。<li>'value''number'

'value'カスタム属性を使用しない理由は、他のカスタム属性を使用する代わりにということです。元。いう'toonId'

$('#list').append($("<li></li>").html(Joker(8123456789)'<a class=search-choice-close href=#></a>').attr('toonId', "8234567890"));

レンダリングすると、次のようになります。

<li class="selectedlistItems" toonId="8234567890">Joker(8123456789)<a class="search-choice-close" href="#"> </a></li>

<li>これにより、アイテムに新しい属性が追加され、'toonId'後でどこからでもプロパティにアクセスできます。

これが役立つことを願っています。

于 2012-09-14T10:05:41.963 に答える
0

attr()文字列を返すだけなので、間違いなく大きな数で機能します。

私はjsfiddleであなたのコードを試しました。もちろん、いくつかの詳細が欠けていたので、創造的に追加しました。次に、正しくないように思われるコードの一部を修正しました。とにかく、それは今働いています。

http://jsfiddle.net/QA5nk/1/

変更には、次の行が含まれます。

var check = $(this).attr('value'); // instead of looking for the parent
...
// parent.remove(); // this line is removing what is already removed

何かを2回削除しようとしたため、ページが爆発したため、コメントアウトしました.

于 2012-09-07T11:17:07.250 に答える