1. 程式人生 > >遇到一個關於呼叫javascript語句不起作用的問題

遇到一個關於呼叫javascript語句不起作用的問題

今天遇到一個需求,就是在頁面的sidebar/左側有一個下拉選單,選單有三級,前兩級點選的時候會彈出下一級的選單,最後一級點選的時候頁面內容部分/右側會展現相應的文章內容。

因為不想在每一次點選最後一級選單的時候都去資料庫讀取資料或者是用ajax讀取資料,所以在頁面一載入的時候就已經把每個小選單對應的文章內容也獲取到了。
我的思路就是,每篇文章跟在每一個小選單,然後用隱藏div隱藏起來,每個隱藏div都有個屬性,這個屬性就是小選單的id值。當點選每一個小選單的時候,用javascript獲取到這個選單的id值,然後獲取到對應id的隱藏div裡面的所有內容,然後把內容放到右側那裡。
其實如果只是點選左側小選單,右側就顯示相應的文章內容,是比較好實現的,只要小選單和隱藏div都有對應相同的屬性值,就能呼叫。例如如下程式碼所示:

<li class="list-group-item dropdown clearfix" sid="li_{$voco['id']}">
                            <a href="javascript:void(0);" name="show_div" sid="sd_{$voco['id']}">
                            <i class="fa fa-circle"></i> 
                            {$voco['title']}
                            </a
>
<div style="display:none;" id="div_{$voco['id']}">

如圖中程式碼所示,我給a標籤(小選單)和div(隱藏div)都設定了一個同樣包含有id值的屬性,想要點選左側的小選單,右側就顯示相應的內容,程式碼如下:

<script type="text/javascript">
      $("[name='show_div']").click(function(){
        //先要去除所有紅色,
        $("[name='show_div']"
).parent().removeClass('active'); var val = $(this).attr('sid'); val = val.substr(3); //點選對應的優惠,sidebar上的li元素是active,即為紅色, $("[sid='li_"+val+"']").addClass('active'); //選擇相應的優惠內容在頁面上 val = "div_" + val; var html = document.getElementById(val).innerHTML;//alert(html); document.getElementById('showdiv').innerHTML = html;

這裡用到innerHTML,先用innerHTML獲得隱藏div裡面的內容,再把這個內容賦值給右側的內容展示區域。

如果問題到這裡的話應該就簡單了,但是現在還有一個需求,就是在右側顯示的文章內容裡面會有幾篇文章的標題,而使用者點選文章標題就可以看到相應的文章了,然後我就想,那可以啊,只要給那幾個文章標題都加上和小選單一樣的屬性值,那麼點選這幾個文章標題的時候,同樣獲取到這個屬性值,再獲取到這個屬性值對應的內容後覆蓋到右側內容,就可以了。

所以我就如法炮製,但是發現一個問題,點選那幾個文章標題根本沒有反應,就是說我對那幾個文章標題寫的js語句根本不起反應,這是為什麼呢?我開啟瀏覽器,按F12除錯,然後輸入js語句,終於讓我發現了問題所在,那就是如果點選左側選單,彈出內容後,在瀏覽器除錯欄輸入js語句,點選內容裡面的文章標題,js語句起作用了;但是我點選了文章標題之後,再一次彈出來的內容裡面也包含了文章標題,我點選,沒反應,說明js語句只運行了一次,而我們的需求邏輯是對文章標題做作用的js語句必須時刻執行,所以我想到了每點選一次文章標題,就要重新生成一次js語句,就是要把對文章標題作用的js語句寫到一個函式裡面,並且不斷迴圈呼叫,程式碼如下:

$("[name='show_ss']").click(function(){
            var pp = $(this).attr('sid');
            pp = pp.substr(3);
            pp = "div_" + pp;
            var html = document.getElementById(pp).innerHTML;
            document.getElementById('showdiv').innerHTML = html;
            if (true) {
              bb();
            }
        });
        function bb(){
          $("[name='show_ss']").click(function(){
              var pp = $(this).attr('sid');
              pp = pp.substr(3);
              pp = "div_" + pp;
              var html = document.getElementById(pp).innerHTML;
              document.getElementById('showdiv').innerHTML = html;
              bb();
          });
        }

感覺個人對於js只理解了一點點,還是要從根本去理解,這樣寫語句的時候才能更明白如何符合脈絡邏輯去編寫。

相關推薦

遇到一個關於呼叫javascript語句作用的問題

今天遇到一個需求,就是在頁面的sidebar/左側有一個下拉選單,選單有三級,前兩級點選的時候會彈出下一級的選單,最後一級點選的時候頁面內容部分/右側會展現相應的文章內容。 因為不想在每一次點選最後一級選單的時候都去資料庫讀取資料或者是用ajax讀取資料,所以

【spring cloud】spring cloud 使用feign呼叫,1.fallback熔斷器作用,2.啟動報錯Caused by: java.lang.ClassNotFoundException: com.netflix.hystrix.contrib.javanica.aop.asp

1.首先使用feign呼叫,需要配置熔斷器 2.配置熔斷器需要將熔斷器注入Bean,被spring可以掃描到 3.熔斷器類需要實現feignClient介面 4.hystrix的jar需要被maven引用,並且在classpath下 5.注意,feignClient上儘量不要使用@RequestMap

動態生成一個textview,設定padding作用的解決辦法。

今天在動態寫佈局的時候,動態new了一個TextView,然後給其設定padding不起作用。 TextView tv = new TextView(mContext); LinearLayout.

發起一個ajax請求,response 重定向,為什麼作用

總結: Ajax只是利用指令碼訪問對應url獲取資料而已,不能做除了獲取返回資料以外的其它動作了。所以瀏覽器端是不會發起重定向的。 個人理解正常http url請求和ajax請求的區別: 1)正常的http url請求,只有瀏覽器和伺服器兩個參與者。瀏覽器端發起一

WebView 呼叫js ,混淆後作用

WebView 呼叫js ,混淆打包後不起作用了,怎麼解呢 當然從proguard 混淆配置著手: 在混淆配置檔案裡做如下配置, 一種解決方案,不限於此。 -keepclassmembers class com.test.AccountActivity$MyJavaSri

crash log呼叫棧看到的解決方案(debug symbols作用)

  1         前言 有時crash log在xcode中,看不到crash的呼叫堆疊,只有些十六進位制,下面是解決的參考方法。 2         先檢視symbolicate工具環境設定 步驟一: 在“終端”中,使用如下工具檢視symbolicate工具是否出問

spring 同一個類中方法呼叫 註解作用

spring  同一個類中方法呼叫 註解不起作用 需要新增 AopContext.currentProxy() 這樣

導致spring事務配置作用的一種原因

red something 事務配置 nbsp oid -s color con bsp @Component public class AnalyticsApplication { @Autowired private InitializationAc

textArea中的placeholder屬性作用

問題 img tex text tro pan str ext textarea 問題描述: textarea中加的placeholder屬性有給值,但是在jsp頁面中沒有對應的提示信息顯示,如下圖所示: 原因: <textarea>與</texta

AutoCAD 許可管理器作用,或未正確安裝,現在將關閉

選擇 分享 log eight src ref 問題 通過 重新安裝 問題描述 重新安裝了也還是這樣,而且第二次打開都跳不出申請碼界面就關閉了。 問題原因,初步認為:AutoCAD 在首次彈出申請激活類型的類型時,直接選擇了網絡激活,而且沒有激活成功。再

SpringBoot學習遇到的問題(1) - 配置文件有日誌的debug模式等配置項,為什麽作用

boot lease bug fig spa stack 不起作用 網站 cat 這個問題困擾我近乎兩天,通過查找N多資料後終於解決,寫下來共享給大家。 logging.level.root=DEBUG ... 一系列的日誌配置項,都不起作用的原因是springboot啟動

left outer join的on作用

oci join microsoft nbsp mysq soft sel asp msdn left outer join的on不起作用 https://msdn.microsoft.com/zh-cn/library/ms177634.aspx?f=255&am

CSS 中first-child和last-child作用原因

clas 第一個 元素 col 沒有 XML last 發的 n) 今天開發的時候,發現last-child不起作用,看了下原因順便給自己學習CSS選擇器,我們這裏舉個例子,如下代碼:<div><h1>title</h1> <p&g

鼠標滾輪圖片放大縮小功能,使用layer彈框後作用

src con ext 顯示 想是 它的 max msg 隨著 今天在項目中遇到的一個問題:點擊按鈕使用layer彈框彈出一張圖片,需要加一個鼠標滾輪放大縮小,圖片也跟著放大縮小的功能。於是在網上找了一個demo。 DEMO: 1 <!DOCTYPE html P

vue雙向綁定時添加.sync作用的原因

component 2.0 雙向 例子 不同 版本 name 但是 vue <my-component v-bind:my-name.sync="name" v-bind:my-age.sync="age"></my-component> 以上代碼是

ios微信瀏覽器click事件作用的解決方法

ont func 手機 alert 微信 搜索 pan font js代碼 $(document).on( "click", ".weui_cell", functi

Linux下,PHP的SESSION作用的問題

lin mod data article trac ack tracking track rac 改動SESSION目錄的權限就能夠了。 先找到SESSION目錄, 然後 chmod -R 777 /var/lib/php/session 假設沒有此目錄

Custom Email Attribute在客戶端作用原因

con tcl messages 原因 attribute clas nat a-z ble 原文發布時間為:2011-07-16 —— 來源於本人的百度文章 [由搬家工具導入]Custom Email Attribute在客户&#

angular4實戰開發問題——ngclass作用

解決 就會 當我 項目 click clas 定義 刷新 樣式 由於路由機制會導致頁面不刷新。 在項目中,很多都是使用click做的路由跳轉。ngclass有時候會不起作用, 這個時候我是很盲目的,一開始在考慮是不是書寫的問題。ngclass需要有特定的格式?第一個參數為類

安裝jdk配置環境變量JAVA_HOME作用

命令行 問題解決 .com top home 用戶 裝系統 img 環境變量 今天重新安裝系統,需要裝jdk,配置環境變量,於是先配置JAVA_HOME D:\Program Files\Java\jdk1.8.0_144, 然後在配置path路徑,但是cmd到dos命令