2016-05-07 5 views
0

私はドロップダウンの下にボタンを追加し、どのボタンがクリックされたかに基づいて値を変更するユーザースクリプトを作成しようとしています。ここに示した3つの別々のドロップダウンがありますボタンのクリックでオプションを変更する

<fieldset> 
<div style="float: left;"> 
<div><label>Number of big seeds</label> <select class="form-control" name="big"> <optgroup label="big"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option></optgroup> </select></div> 

 

<div><label>Number of small seeds</label> <select class="form-control" name="small"><optgroup label="small"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option></optgroup> </select></div> 

 

<div><label>Number of tiny seeds</label> <select class="form-control" name="tiny"><optgroup label="tiny"><option value="0">0</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option> </optgroup> </select></div> 

 

そして、ここではuserscriptで私の失敗した試みです:

$(document).ready(function() { 

    //Variables for buttons 
    var $0 = $('<button type="button" class="0" id="0">0</button>'); 
    var $1 = $('<button type="button" class="0" id="1">1</button>'); 
    var $2 = $('<button type="button" class="0" id="2">2</button>'); 
    var $3 = $('<button type="button" class="0" id="3">3</button>'); 
    var $4 = $('<button type="button" class="0" id="4">4</button>'); 
    var $5 = $('<button type="button" class="0" id="5">5</button>'); 

    var $6 = $('<button type="button" class="1" id="0">0</button>'); 
    var $7 = $('<button type="button" class="1" id="1">1</button>'); 
    var $8 = $('<button type="button" class="1" id="2">2</button>'); 
    var $9 = $('<button type="button" class="1" id="3">3</button>'); 
    var $10 = $('<button type="button" class="1" id="4">4</button>'); 
    var $11 = $('<button type="button" class="1" id="5">5</button>'); 

    var $12 = $('<button type="button" class="2" id="0">0</button>'); 
    var $13 = $('<button type="button" class="2" id="1">1</button>'); 
    var $14 = $('<button type="button" class="2" id="2">2</button>'); 
    var $15 = $('<button type="button" class="2" id="3">3</button>'); 
    var $16 = $('<button type="button" class="2" id="4">4</button>'); 
    var $17 = $('<button type="button" class="2" id="5">5</button>'); 


    //Add buttons 
    $('.form-control').eq(0).after($0,$1,$2,$3,$4,$5); 
    $('.form-control').eq(1).after($6,$7,$8,$9,$10,$11); 
    $('.form-control').eq(2).after($12,$13,$14,$15,$16,$17); 

}); 

//Click event 
$(":button").click(function(){ 
    var thisClass = parseInt($(this).attr('class')); 
    var thisID = parseInt($(this).attr('id')); 

    $('.form-control').eq(thisClass).val(thisID); 
}); 

誰かが私が間違っているつもりだところを教えてもらえますか?

+0

問題は何ですか、うまくいくようです - > https://jsfiddle.net/zqxrp016/ – adeneo

+0

奇妙なことに、私はそのウェブサイトの外でそれを使用しようとするとボタンは何も変わりません。 – Somethingorother

+0

別の注意点として、一連の数値のような無意味な名前を使わないようにすることは、コードの読み込みとデバッグが非常に困難になるためです。代わりに、それぞれのもの(変数、関数、クラスなど)は、それが何であるか、または何かを記述する意味のある名前を持つ必要があります。 –

答えて

0

クリックイベントはただちにバインドされますが、ドキュメントが準備完了するまでボタンは追加されません。 .click()コールを$(document).ready()の中に入れて、ボタンを追加します。

$(document).ready(function() { 

    //Variables for buttons 
    var $0 = $('<button type="button" data-index="0" data-value="0">0</button>'); 
    var $1 = $('<button type="button" data-index="0" data-value="1">1</button>'); 
    var $2 = $('<button type="button" data-index="0" data-value="2">2</button>'); 
    var $3 = $('<button type="button" data-index="0" data-value="3">3</button>'); 
    var $4 = $('<button type="button" data-index="0" data-value="4">4</button>'); 
    var $5 = $('<button type="button" data-index="0" data-value="5">5</button>'); 

    var $6 = $('<button type="button" data-index="1" data-value="0">0</button>'); 
    var $7 = $('<button type="button" data-index="1" data-value="1">1</button>'); 
    var $8 = $('<button type="button" data-index="1" data-value="2">2</button>'); 
    var $9 = $('<button type="button" data-index="1" data-value="3">3</button>'); 
    var $10 = $('<button type="button" data-index="1" data-value="4">4</button>'); 
    var $11 = $('<button type="button" data-index="1" data-value="5">5</button>'); 

    var $12 = $('<button type="button" data-index="2" data-value="0">0</button>'); 
    var $13 = $('<button type="button" data-index="2" data-value="1">1</button>'); 
    var $14 = $('<button type="button" data-index="2" data-value="2">2</button>'); 
    var $15 = $('<button type="button" data-index="2" data-value="3">3</button>'); 
    var $16 = $('<button type="button" data-index="2" data-value="4">4</button>'); 
    var $17 = $('<button type="button" data-index="2" data-value="5">5</button>'); 


    //Add buttons 
    $('.form-control').eq(0).after($0,$1,$2,$3,$4,$5); 
    $('.form-control').eq(1).after($6,$7,$8,$9,$10,$11); 
    $('.form-control').eq(2).after($12,$13,$14,$15,$16,$17); 

    //Click event 
    $(":button").click(function(){ 
     var thisIndex = $(this).data('index'); 
     var thisValue = $(this).data("value"); 

     $('.form-control').eq(thisIndex).val(thisValue); 
    }); 
}); 

また、要素に重複IDを渡すべきではありません。データ属性を使用するように変更しました。クラスを複製しても問題はありませんが、要素に関するデータを保持するだけではそれほど適切ではないので、データ属性にも変更しました。

関連する問題