Attribuire Jquery Ad Un Oggetto Button

Salve ragazzi , ho inserito un button e volevo applicarli al click un’evento e quindi ho fatto cosi:


echo CHtml::button('Aggiungi prodotto',array(

                                                             'js:function(){

                                                                 $(this).click(function () {

                                                                   alert("ciao");

                                                                   

                                                                 })

                                                                 }'

               ));

ma il problema e che non fa niente :o :o :o


<?php echo CHtml::button('Aggiungi prodotto',array('onclick'=>'alert("ciao");'));?>

emafer ti ha risposto gia’, comunque considera che this in jquery ha senso in funzioni chiamate su qualche oggetto, per esempio:


<?php echo CHtml::button('Aggiungi prodotto',array('onclick'=>'function(){console.log(this)}'));?>



Se ti serve riferirti a qualcosa devi dargli una classe o un id, tipo:


$('a.link_class').click(function(e){});

grazie emafar ,

il problema si fa più intrigante vorrei generare questo che ha id Prodotto_nome_prodotto_select ovvero:




<?php echo $form->labelEx($model_prodotto,'id_prodotto'); ?>

            <div id="sel_prodotto">

                   <?php $form->widget('ext.combobox.EJuiComboBox', array(

                     'model' => $model_prodotto,

                     'attribute' => 'nome_prodotto',

                     // data to populate the select. Must be an array.

                     'data' => ProdottoController::lista_pro_combobox(),

                     // options passed to plugin

                     'options' => array(

                        // JS code to execute on 'select' event, the selected item is

                        // available through the 'item' variable.

                        'onSelect' => '',

                        // JS code to be executed on 'change' event, the input is available

                        // through the '$(this)' variable.

                        'onChange' => '',

                        // If false, field value must be present in the select.

                        // Defaults to true.

                        'allowText' => TRUE,

                    ),

                    // Options passed to the text input

                    'htmlOptions' => array('size' => 10),

                ));

               ?>           

               <?php echo $form->error($model,'nome_prodotto'); ?>

           </div>




<?php echo CHtml::button('Aggiungi prodotto',array('onclick'=>' $("#prodotto").append($("#sel_prodotto").html());

                                                                               $(this).attr("name","prova");'                                                                 

                                                                  )); ?>

Mi crea la select ma no mi attiva il widget ovvero non mi fa scorrere gli elementi al suo interno… Il problema sta nel tag name , ho provato a cambiarlo con $(this).attr(“name”,“prova”);’ ma non cambia :(

bè, quando clicchi il bottone tu ordini due cose:

1 aggiungi il div con il widget(#sel_prodotto) al div prodotto.

  • e questo mi pare lo faccia

2 setti al bottone (this) un attributo di nome ‘name’ con valore ‘prova’.

Quindi non capisco: Cosa non viene settato di precisione?

E perché hai bisogno di settare l’attributo name del button?

Se per esempio dovessi aggiungere il prodotto alla lista, dovresti dire: questo botton ha un id=idprodotto, se lo clicco aggiungo id_prodotto alla lista dei prodotti ordinati.

il problema sta nel fatto che voglio cambiare id (mi ero espresso male prima) solo al secondo widget altrimenti non funziona vanno in conflitto … il this non era al bottone ma pensavo facesse riferimento all’ultimo elemento creato sorry

Bè potresti dire al widget dentro a sel_prodotto, tramite html_option che il suo id è pincopalla.


 'htmlOptions' => array('size' => 10,'id'=>'pincopalla'),

e poi potresti usare jquery per modificare il valore di quell’input text (#pincopalla).val(etcetc)…


<?php echo CHtml::button('Aggiungi prodotto',array('id'=>'id_prodotto_da_aggiungere,'onclick'=>' $("#prodotto").append($("#sel_prodotto").html());

                                                                               $("#pincopalla").val($(this).id);'                                                                 

                                                                  )); ?>

Se ho capito cosa intendi…

emafar il problema è questo se due widget hanno id o name uguali il secondo non funziona.

primo widget:


'htmlOptions' => array('size' => 10,'id'=>'lista_prodotti'),

Quindi vorrei al momento del:


'onclick'=>' $("#prodotto").append($("#sel_prodotto").html());'  

vorrei attribuire al nuovo oggetto un nuovo id ad esempio ‘id’=>‘lista_prodotti_2’

Per esempio potresti dare un id fisso al secondo widget,

quando clicchi il bottone puoi fissare l’id del secondo widget come vuoi tu

$("#sceondo_widget").attr(‘id’,‘sasfasf’);

dovrebbe andare ;)

il secondo widget ha come id quello del primo quindi se faccio questo:


$("#sceondo_widget").attr('id','sasfasf');

me li cambia a tutti e due… Sto impazzendo

Pett: tu hai un div con id "selprodotto" al cui interno hai un widget da inserire, con attributo disabilitato per evitare che ti venga passato dal form. Lo metti e con jquery te lo tieni nascosto in fondo alla pagina.

Quando clicchi sul botton cloni il div col widget,lo appendi, gli cambi id e lo rendi visibile e lo abiliti (rimuovendo l’attributo disabled

In questo modo tu hai sempre in fondo un div pronto da inserire in fondo.

scusami emafer non ho capito :(

Colpa mia

  1. nella tua view includi il div con il widget a fondo pagina, ha due particolarità:

    a) ha un id fissato da te (ae id_da_cambiare)

    B) è disabilitato




<div id="sel_prodotto">

                   <?php $form->widget('ext.combobox.EJuiComboBox', array(

                     'model' => $model_prodotto,

                     'attribute' => 'nome_prodotto',

                     // data to populate the select. Must be an array.

                     'data' => ProdottoController::lista_pro_combobox(),

                     // options passed to plugin

                     'options' => array(

                        // JS code to execute on 'select' event, the selected item is

                        // available through the 'item' variable.

                        'onSelect' => '',

                        // JS code to be executed on 'change' event, the input is available

                        // through the '$(this)' variable.

                        'onChange' => '',

                        // If false, field value must be present in the select.

                        // Defaults to true.

                        'allowText' => TRUE,

                    ),

                    // Options passed to the text input

                    'htmlOptions' => array(

'size' => 10

,'id'=> 'id_da_cambiare'

,'disabled'=>'disabled'

),

                ));

               ?>   



Setti intanto uno script di jquery in cui imposti a invisibile di default il div inserito, e fissi un contatore.




Yii::app()->clientScript->registerScript('

$count_widget=0;

$("#sel_prodotto").hide();

')



Quando clicchi sul button poi fai così:




'onclick'=>' aggiungiwidget();'  




$script='function aggiungiwidget(){

//clono il widget

$nuovwidget=$("id_da_cambiare").clone();

$nuovowidget.attr("id","agg_prodotto_"+$count_widget);

//aumento il counter

$count_widget=$count_widget+1;

//lo aggiungi

$("#prodotto").append($nuovowidget);

$nuovowidget.show();

}';

Yii::app()->clientScript->registerScript($script);



potrebbe funzionare ;)

mi da errore:


Missing argument 2 for CClientScript::registerScript()

su


Yii::app()->clientScript->registerScript($script);

Scusa


Yii::app()->clientScript->registerScript('id_script',$script);

niente


ReferenceError: aggiungiwidget is not defined

ok risolto questo problema:


<?php Yii::app()->clientScript->registerScript('hide_div','

count_widget=0;

$("#sel_prodotto").hide();

',  CClientScript::POS_HEAD);


$script='function aggiungiwidget(){

//clono il widget

nuovwidget=$("#id_da_cambiare").clone();

nuovowidget.attr("id","agg_prodotto_"+count_widget);

//aumento il counter

count_widget=count_widget+1;

//lo aggiungi

("#prodotto").append(nuovowidget);

nuovowidget.show();

}';

Yii::app()->clientScript->registerScript('aggiungiwidget',$script,  CClientScript::POS_HEAD);

?>

ma mi da errore:

ReferenceError: nuovowidget is not defined

io ho scritto il codice di fretta, direttamente qui, quindi va controllato: ad esempio il problema che mi riporti è che la prima volta ho scritto nuovwidget, senza o

emafer ancora niente ora stessa identica cosa di prima ovvero mi crea il pulsante ma non funziona.

Nelle figure è illustrato il prima ed il dopo evento…

eccomi qui

innanzi tutto bisogna dire che l’id del combo è id_da_cambiare_select, e quindi dobbiamo tenerne conto ;)

scoperto questo ho scoperto che se metto la funzione nel renderScript, a me, non la legge.

pertanto:




<script>$("#sel_prodotto").hide();

    $count_widget=0;

    function aggiungiwidget(){

$nuovowidget=$("#id_da_cambiare_select").clone();

$nuovowidget.attr("id","agg_prodotto_"+$count_widget);

$count_widget=$count_widget+1;

$("#prodotto").append($nuovowidget);

}

    </script>

<?php      

echo CHtml::button('Aggiungi prodotto',

        array('id'=>'id_prodotto_da_aggiungere','onclick'=>'aggiungiwidget();'                                                                 

                                                                  )); ?>

Questo mi funziona, mi aggiunge nel div prodotto la select, attribuendogli un id che aumenta dinamicamente.

Ps: volendo puoi selezionare anche un valore del select passandoglielo con il button, in questo modo:


<script>$("#sel_prodotto").hide();

    $count_widget=0;

    function aggiungiwidget(valore){

$nuovowidget=$("#id_da_cambiare_select").clone();

$nuovowidget.attr("id","agg_prodotto_"+$count_widget);

$nuovowidget.val(valore)

$count_widget=$count_widget+1;

$("#prodotto").append($nuovowidget);

}

    </script>

<?php      

echo CHtml::button('Aggiungi prodotto',

        array('id'=>'id_prodotto_da_aggiungere','onclick'=>'aggiungiwidget("1");'                                                                 

                                                                  )); ?>