2016-11-28 38 views
0

我有一個行數組,每行都有一個單選按鈕(name ='status')。我已將單選按鈕放入索引中,以便每個單選按鈕都能反映其正確的值。但是,JavaScript不再能夠改變這個值 - 我對我需要對javascript做出的相應改變感到困惑。將單選按鈕放入索引後Javascript不工作

<form action="<?php echo $this->form_action; ?>" method="post"> 
    <p class="hide"><input name="status" type="text" value="" /></p> 
    <table id="manage-items" cellpadding="0" cellspacing="0" border="0"> 
     <thead> 
      <tr> 
       <th><?php echo $this->translate('Item');?></th> 
       <th><th><?php echo $this->translate('Status');?></th></th> 
      </tr> 
     </thead> 

     <tbody> 
      <?php $ind = 0; ?> 
      <?php foreach ($this->items as $item) { 
       $item_link = 'type=product'; 
       ?> 
        <tr id="item_<?php echo $ind; ?>"> 
         <td data-label="Title"><span class="orangelink"><?php echo $item->title; ?></span></td> 
         <td align="left" style="padding-left:22px" class="color-status-<?php echo $item['active']; ?>"> 
          <?php if (in_array($item['active'], array(0, 1))) { ?> 
           <input type="radio" name="item[<?php echo $ind; ?>][status]" value="1" <?php if ($item['active'] == 1) echo 'checked'; ?>>Active 
           <br> 
           <input type="radio" name="item[<?php echo $ind; ?>][status]" value="0" <?php if ($item['active'] == 0) echo 'checked'; ?>>Inactive 
          <?php } else { ?> 
           <?php echo $item['active']; ?> 
          <?php } ?> 
         </td> 
        </tr> 
       <?php $ind++; ?> 
      <?php } ?> 
     </tbody> 
    </table> 
</form> 


<script type="text/javascript"> 
    //console.log(jQuery) 
    head.ready('jquery', function() { 
     $(document).ready(function() { 

      $('input[name="radio"]').click(function() { 
       var status = this.value; 
       var id = $(this).parents('tr').attr('id'); 
       console.log('here now') 
       $.ajax({ 
        type: 'post', 
        url: "?module=items&controller=block&action=modDaStatusBro", 
        data: 'id=' + id + '&status=' + status, 
        beforeSend: function() { 
         $('#' + id).animate({ 
          'backgroundColor': '#FFBFBF' 
         }, 400); 
        }, 
        success: function (result) { 
         if (result == 'ok') { 
          $.get(window.location.href, function (data) { 
           $('#' + id).html($(data).find('#' + id).html()); 
           setTimeout(function() { 
            $("#" + id + "").animate({'backgroundColor': 'transparent'}, 400).find('.tooltip').simpletooltip(); 
            deletePage(); 
           }, 500); 
          }); 
         } else { 
          alert(result); 
          $("#" + id + "").animate({'backgroundColor': 'transparent'}, 400); 
         } 
        } 
       }); 
      }); 
     }); 
    }); 

</script> 
+1

下載請你的代碼的相關部分粘貼到[的jsfiddle ](https://jsfiddle.net/),所以我們可以更好地調試它。 – Carpetfizz

+1

@Carpetfizz剛剛粘貼了我在上面的內容:https://jsfiddle.net/7quo5akr/。不知道如何鏈接jsfiddle中的數據庫來說明多行。 – ian

+1

在上面的小提琴文本輸入中單擊觸發ajax。但我很確定它應該通過點擊收音機來觸發。嘗試使用'$('input [type =「radio」]')。點擊(function(){'而不是'$('input [name =「status」]')點擊(function(){' –

回答

1

<tr id="<?php echo $item['id']; ?>"> 
.... 
</tr>  

之間在PHP產生表的數據元素似乎不包含名爲 「狀態」 的輸入元件。對於$ind每個值生成的HTML預計

 <input type="radio" name="item[n][status]" .... Active 
     <input type="radio" name="item[n][status]" .... Inactive 

其中n是$值IND。但是選擇器

 $('input[name="status"]').click(function() { 

與名稱格式不匹配。一個一個鍵行程解決方案將是一個 * wild card添加到選擇在名稱值匹配「狀態」的任何地方:

 $('input[name*="status"]').click(function() { 

存在其它可能性,如添加一種特殊的類名來影響每個單選按鈕(不推薦),或者爲查詢選擇器(可行)找到的每個無線電輸入添加一個特殊的數據屬性。


腳註:TR元素周圍的DIV元素不應該在那裏。 DIV未列爲允許的子元素 TBODY元素,也不是允許的父元素 TR元素。
(回答評論)

需要用於性質,例如的color animation甲jQuery插件backgroundColor

代碼可以從CDN中的

https://code.jquery.com/color/jquery.color-2.1.2.min.js,或
https://cdnjs.cloudflare.com/ajax/libs/jquery-color/2.1.2/jquery.color.min.js

下載或整個包可以從GitHub

+0

@ian請在這裏發表評論。很高興你已經取得了進展,但是聽起來好像你有一個新問題,就是解決了這個問題。如果您想詢問有關「找不到物品」的錯誤,請包括導致它生成的條件,檢測到的位置和報告的位置。如果可能的話,提供一個最小的測試用例來驗證和重現問題。除非PHP代碼有問題,否則請使用發送到瀏覽器的HTML片段代替PHP源代碼。祝你好運。 – traktor53

+0

呵呵,你真的不理解服務器上處理的PHP源代碼和從服務器發送到客戶端的HTML輸出之間的區別。你沒有用(name =「item [n] [status]」)替換(name =「item [<?php echo $ ind;?>] [status]」),因爲左邊的東西是生成的PHP右邊的HTML作爲輸出,其中'[n]'中的'n'不是字母'n',而是PHP循環中'$ ind'的值。 – traktor53

+0

Tx @ Traktor53,我實際上理解了PHP/html輸出的差異,我只是不明白你的描述。無論如何,我都能正常工作,非常感謝您提供的幫助。我最後回到了上面的其中一個建議,使用$('input [type =「radio」]'),點擊(function(){而不是通配符,我改變了上面的代碼。對於你的時間!! – ian