Hướng dẫn how to pass two parameters in onclick function in html - cách truyền hai tham số trong hàm onclick trong html

Tôi muốn sen hai id khi onclick xảy ra như bây giờ khi div 2 được nhấp, tôi cũng muốn vượt qua ID của Div thứ 2 và sau đó viết tập lệnh cho Div thứ 2. Có thể không? Nếu vậy, như thế nào? Bất kỳ ví dụ?

<div id="1st_div"></div>
<div id="2nd_div">
     <div id="inner_of_2nd_div" onclick="myfunction('1st_div')"></div>
</div>

Hướng dẫn how to pass two parameters in onclick function in html - cách truyền hai tham số trong hàm onclick trong html

Michelem

14.1k5 Huy hiệu vàng49 Huy hiệu bạc65 Huy hiệu Đồng5 gold badges49 silver badges65 bronze badges

hỏi ngày 29 tháng 7 năm 2015 lúc 9:07Jul 29, 2015 at 9:07

5

Bạn có thể vượt qua nhiều tham số như bạn muốn. Chỉ cần xác định chức năng cho phù hợp.

Chẳng hạn, đối với chức năng 2 tham số

onclick="myfunction(p1, p2)"

và chức năng của bạn được chức năng như

myfunction(p1, p2) {
  //do your stuff

}

Đã trả lời ngày 29 tháng 7 năm 2015 lúc 9:18Jul 29, 2015 at 9:18

VeverkeveverkeVeverke

7.2094 Huy hiệu vàng46 Huy hiệu bạc93 Huy hiệu Đồng4 gold badges46 silver badges93 bronze badges

        <div id="1st_div"></div>
<div id="2nd_div">
     <div id="inner_of_2nd_div" onclick="myfunction(document.getElementById('1st_div'));">asa</div>
<script>
function myfunction(obj)
{
//here i caught the object 
obj.innerHTML=obj.id;
}
</script>

Đã trả lời ngày 29 tháng 7 năm 2015 lúc 10:37Jul 29, 2015 at 10:37

Hướng dẫn how to pass two parameters in onclick function in html - cách truyền hai tham số trong hàm onclick trong html

Tôi hiểu rằng bạn muốn một hàm có đối số ID của div đã nhấp. Nếu đúng, hãy sử dụng jQuery và làm điều đó:

HTML:

<script src="http://code.jquery.com/jquery-1.11.3.min.js"/> 
<div id="1st_div" class="clickable"></div>
                <div id="2nd_div" class="clickable">
                     <div id="inner_of_2nd_div" ></div>
                </div>

JS JQuery:

$(".clickable").click(function(){
        var _id=$(this).attr("id");
        alert("I am div id="+_id+" and I've been clicked right now!");
    });

Đã trả lời ngày 29 tháng 7 năm 2015 lúc 9:22Jul 29, 2015 at 9:22

Hướng dẫn how to pass two parameters in onclick function in html - cách truyền hai tham số trong hàm onclick trong html

3pic3pic3pic

1.1908 Huy hiệu bạc26 Huy hiệu đồng8 silver badges26 bronze badges

4

Trong khi tất cả những người làm việc trong một dự án phát triển web trong quá khứ đã phải đối phó với sự kiện

onclick="myfunction(p1, p2)"
1 (cho dù đó là sử dụng React, Vue hay thậm chí Không phải là tầm thường.

Trong bài viết dựa trên ví dụ này, tôi muốn nhanh chóng bao gồm các cách khác nhau để gửi nhiều tham số đến chức năng xử lý sự kiện của bạn mà không phải bán linh hồn của bạn cho Satan.

Ví dụ sử dụng trường hợp

Hãy cùng xem nhanh một trường hợp sử dụng giả để chúng tôi tất cả trên cùng một trang. Giả vờ bạn có một danh sách các mục trên giỏ hàng giả, mỗi mục có nhiều thuộc tính và khi nhấp vào một trong các nút, bạn cần xóa nó khỏi giỏ hàng. Tuy nhiên, vấn đề là việc xóa nó không phải là tầm thường. Trước khi bạn đưa nó ra khỏi danh sách, trước tiên bạn cần:

  • Hãy chắc chắn rằng nó đã ở bên trong xe đẩy lâu hơn một giờ. Nếu có, khách hàng có thể loại bỏ nó. Tôi biết, quy tắc điên rồ, nhưng đây là một trường hợp sử dụng giả, vì vậy hãy để có một số niềm vui, phải không?
  • Cập nhật bộ đếm danh mục để đảm bảo tổng số tiền là chính xác.

Chỉ sau đó, nếu mọi thứ đều ổn, chúng ta có thể tiến hành xóa mục khỏi danh sách.

Và đây là mã có liên quan mà chúng tôi sẽ làm việc với:

import { useState } from "react"

const fakeItems = [
    {name: "Ergo keyboard", price: 200, pictureUrl: "https://images.squarespace-cdn.com/content/v1/5a8723cb7131a5121206d464/1625810188933-U8XTJAMWR8A0MJDJ32QA/lain_top.jpg?format=2500w",  id: 1, category: 1, timeAdded: new Date() },
    {name: "Smallice PCB", price: 120, pictureUrl: "https://images.squarespace-cdn.com/content/v1/5a8723cb7131a5121206d464/1617681008502-BJJPF8TRPN6LNTMUBROR/idi7pnppq0d61.jpg?format=2500w",  id: 2, category: 2, timeAdded: new Date() },
    {name: "Smallice Acrylic Case", price: 400, pictureUrl: "https://images.squarespace-cdn.com/content/v1/5a8723cb7131a5121206d464/1623041004115-JPO9UY3R357ZTPUAWM2D/PXL_20210601_203954893.PORTRAIT_2.jpg?format=2500w", id: 3, category: 3, timeAdded: new Date()},
    {name: "Fourier", price: 320, pictureUrl: "https://images.squarespace-cdn.com/content/v1/5a8723cb7131a5121206d464/1606189295901-T565PVE49OZXN9QK82LD/_RO_5289.jpg?format=2500w", id: 4, category: 4, timeAdded: new Date() }
];

export default function ShoppingCart() {

    const [items, setItems] = useState(fakeItems)

    async function updateCategory() {
        //the code required to check the category goes here...
    }

    function checkTime() {
        //the time-checking logic goes here....
    }

    async function removeItem(id) {
        //right this this logic is missing the category id
        //and the time of insertion into the cart

        let categoryUpdate =  await updateCategory()
        let timeCheck = checkTime()

        if(!categoryUpdate) {
            return console.log("Error, category was not updated")
        }

        if(!timeCheck) {
            return console.log("Error, item has been inside your cart for too long, now you gotta buy it")
        }


        let newItems = items.filter( i => i.id != id)
        setItems(newItems)
    }

    return (
        <ul className="shopping-list">
            {items.map( i => {
                return (<li key={i.id} className="shopping-list-item">
                            <img src={i.pictureUrl} />
                         <br /> {i.name} <span className="price">(USD {i.price})</span>
                        &nbsp; <a onClick={ () => removeItem(i.id)})
                        }} href="#">[Remove]</a>
                    </li>)
            })}
        </ul>
    )
}

Mã từ phía trên sẽ hiển thị một cái gì đó như hiển thị trên hình ảnh sau:

Hướng dẫn how to pass two parameters in onclick function in html - cách truyền hai tham số trong hàm onclick trong html

Được cấp, nó không có nghĩa là một giỏ hàng đẹp, nhưng nó là một danh sách các mặt hàng mà bạn có thể loại bỏ dựa trên các điều kiện nhất định. Điều đó sẽ làm. Lưu ý rằng logic để cập nhật danh mục và kiểm tra thời gian không được thực hiện. Điều đó không liên quan ngay bây giờ, vì vậy chỉ cần cho rằng nó hoạt động và chúng tôi sẽ đối phó với logic xung quanh thay thế.

Như đã nói, điều đầu tiên cần lưu ý từ mã, là trình xử lý

onclick="myfunction(p1, p2)"
1 vì hiện tại đang gọi chức năng
onclick="myfunction(p1, p2)"
3 với ID ID (
onclick="myfunction(p1, p2)"
4). Đây là một cách rất phổ biến để truyền một thuộc tính cho hàm, tuy nhiên, người ta sẽ không đủ, chúng ta cần nhiều thuộc tính hơn, vì vậy hãy để xem các tùy chọn của chúng ta là gì.

#1. Sử dụng hàm mũi tên nội tuyến

Theo ví dụ từ trên cao, một cách rất đơn giản để chuyển nhiều thuộc tính cho trình xử lý của bạn, là gọi trình xử lý từ trong một hàm mũi tên nội tuyến.

    async function removeItem(id, catId, timeAdded) {
        //right this this logic is missing the category id
        //and the time of insertion into the cart

        let categoryUpdate =  await updateCategory(catId)
        let timeCheck = checkTime(timeAdded)

        if(!categoryUpdate) {
            return console.log("Error, category was not updated")
        }

        if(!timeCheck) {
            return console.log("Error, item has been inside your cart for too long, now you gotta buy it")
        }


        let newItems = items.filter( i => i.id != id)
        setItems(newItems)
    }

    return (
        <ul className="shopping-list">
            {items.map( i => {
                return (<li key={i.id} className="shopping-list-item">
                            <img src={i.pictureUrl} />
                         <br /> {i.name} <span className="price">(USD {i.price})</span>
                        &nbsp; 
                        <a onClick={ 
                            () => {
                                e.preventDefault(); 
                                removeItem(i.id, i.category, i.timeAdded)
                            }
                        }} href="#">[Remove]</a>
                    </li>)
            })}
        </ul>
    )

Mã được thêm vào dòng

onclick="myfunction(p1, p2)"
1 trên phần tử
onclick="myfunction(p1, p2)"
6 xác định hàm mũi tên nội tuyến. Vì nó có một định nghĩa chức năng, nó sẽ không được gọi ngay lập tức, nhưng việc đóng cửa được tạo cho phép bạn truy cập các chi tiết vật phẩm của bạn khi nó được gọi. Phương pháp này hoạt động, don lồng làm cho tôi sai, tuy nhiên, nó có một chút mã JSX với logic kinh doanh cho phần cuối và nếu bạn cần vượt qua nhiều thuộc tính thì dòng này có thể trở nên hơi phức tạp để đọc. Trên hết, chúng tôi cũng phải gọi phương thức
onclick="myfunction(p1, p2)"
7 để giữ cho sự kiện nhấp chuột không làm bất cứ điều gì khác ngoài những gì chúng tôi thực sự muốn. Đây chỉ là tôi nitpicking, nhưng nếu bạn hỏi tôi, tôi nghĩ rằng có ít cách làm việc thô thiển hơn. Đôi khi che giấu một chút logic có thể giúp HTML có thể duy trì hơn. Vì vậy, hãy để một cái nhìn nhanh về các lựa chọn thay thế.

#2. Sử dụng móc onclick="myfunction(p1, p2)" 8

Móc

onclick="myfunction(p1, p2)"
8 sẽ cho phép chúng tôi làm sạch mã một chút và trên hết, chức năng của chúng tôi sẽ được ghi nhớ. Đối với mục đích của ví dụ này, lợi ích thứ hai không quan trọng, tuy nhiên, nó chắc chắn là một phần thưởng bổ sung. Mã sẽ trông như thế này:

export default function ShoppingCart() {

    //rest of the component's logic goes here...
    
    const removeHandler = useCallback( (id, catId, timeAdded) => {
       return async (e) => {
        e.preventDefault() //we can all this directly here now!
        let categoryUpdate =  await updateCategory(catId)
        let timeCheck = checkTime(timeAdded)

        if(!categoryUpdate) {
            return console.log("Error, category was not updated")
        }

        if(!timeCheck) {
            return console.log("Error, item has been inside your cart for too long, now you gotta buy it")
        }

        let newItems = items.filter( i => i.id != id)
        setItems(newItems)
       } 

    }, [items])

    return (
        <ul className="shopping-list">
            {items.map( i => {
                return (<li key={i.id} className="shopping-list-item">
                            <img src={i.pictureUrl} />
                         <br /> {i.name} <span className="price">(USD {i.price})</span>
                        &nbsp; 
                        <a onClick={ removeHandler(i.id, i.category, i.timeAdded) } href="#">
                            [Remove]
                        </a>
                    </li>)
            })}
        </ul>
    )
}

Mã với cái móc này trông sạch hơn một chút. Để bắt đầu, chúng tôi gọi một hàm trực tiếp trên trình xử lý

onclick="myfunction(p1, p2)"
1. Không còn cần phải xác định hàm mũi tên nội tuyến, chúng ta chỉ có thể gọi một hàm và vượt qua các thuộc tính chúng ta cần. Hàm mới này sẽ trả về trình xử lý thực tế, đến lượt nó, nhận được đối tượng sự kiện, vì vậy chúng tôi có thể gọi một cách an toàn phương thức
onclick="myfunction(p1, p2)"
7 từ bên trong trình xử lý, thay vì ngay trên HTML.

Đây là một sự thay thế tốt hơn vì chúng tôi đã trừu tượng hóa việc tạo chức năng xử lý và cách nó nên tương tác với sự kiện. Tuy nhiên, chúng tôi có thể làm sạch mã của mình hơn một chút, bằng cách tận dụng các thuộc tính dữ liệu của HTML. Vì vậy, hãy để một cái nhìn.

Phát lại phiên nguồn mở

OpenReplay là một bộ phát lại phiên, phần mở cho phép bạn xem người dùng làm gì trên ứng dụng web của bạn, giúp bạn khắc phục sự cố nhanh hơn. OpenReplay tự lưu trữ để kiểm soát toàn bộ dữ liệu của bạn.

Hướng dẫn how to pass two parameters in onclick function in html - cách truyền hai tham số trong hàm onclick trong html

Bắt đầu tận hưởng trải nghiệm gỡ lỗi của bạn - bắt đầu sử dụng OpenReplay miễn phí.

#3. Sử dụng các thuộc tính dữ liệu

Các thuộc tính dữ liệu là các thuộc tính tùy chỉnh bạn có thể thêm vào HTML của mình và theo mặc định, sẽ bị bỏ qua hoàn toàn bởi trình duyệt, tuy nhiên bạn có thể sử dụng chúng và truy cập chúng thông qua JavaScript. Vấn đề là bạn có thể nhúng các thuộc tính của một mục giỏ hàng vào HTML thực tế của phần tử thay vì phải truyền trực tiếp bằng mã. Nó là một cách gọn gàng để giữ cho HTML càng sạch sẽ nhất có thể. Đây là cách nó sẽ trông như thế nào:

onclick="myfunction(p1, p2)"
0

Bây giờ hãy nhìn vào HTML của liên kết, bạn có thể thấy 3 thuộc tính

myfunction(p1, p2) {
  //do your stuff

}
2 chứa các giá trị được liên kết với mục. Trình xử lý
onclick="myfunction(p1, p2)"
1 cũng trông sạch hơn rất nhiều, không cần phải chuyển bất kỳ thuộc tính nào vào đó, bạn chỉ phải lo lắng về việc chỉ định tên xử lý. Thuộc tính duy nhất bạn quan tâm, là sự kiện thực tế, phản ứng sẽ vượt qua cho bạn. Và thông qua mục tiêu của sự kiện, bạn có thể thấy cách chúng tôi sử dụng phương thức
myfunction(p1, p2) {
  //do your stuff

}
4 để có được thông tin chúng tôi cần.

Kết quả là một HTML sạch hơn nhiều, logic đơn giản hóa và tổng thể một mã không chỉ hoạt động, mà còn dễ đọc và hiểu dễ dàng hơn rất nhiều.


Cuối cùng, cách bạn viết mã chỉ quan trọng với bạn và nhóm của bạn. Không có một cách nào để chuyển nhiều thuộc tính cho trình xử lý

onclick="myfunction(p1, p2)"
1 trong React và tất cả các tùy chọn tiềm năng đều hoàn thành công việc, vì vậy, đó là vấn đề hiểu những gì bạn cần và bạn đang cố gắng đạt được.

Nếu bạn đã xoay sở để giải quyết vấn đề này theo một cách khác, hãy theo dõi tôi trên Twitter tại @deleteman123 và chia sẻ giải pháp của bạn.

Hướng dẫn how to pass two parameters in onclick function in html - cách truyền hai tham số trong hàm onclick trong html

Chúng ta có thể truyền hai tham số trong hàm onclick không?

Bạn có thể vượt qua nhiều tham số như bạn muốn.Chỉ cần xác định chức năng cho phù hợp.. Just define the function accordingly.

Bạn có thể thêm nhiều sự kiện onclick không?

Cách đầu tiên để thực hiện nhiều sự kiện onclick trong React là viết logic của bạn vào một hàm duy nhất và sau đó gọi chức năng đó bên trong trình xử lý sự kiện Onclick.Để tìm hiểu thêm về trình xử lý sự kiện Onclick trong React, hãy xem hướng dẫn của tôi về xử lý sự kiện React Onclick với các ví dụ.write your logic in a single function, and then call that function inside of the onClick event handler. To learn more about the onClick event handler in React, check out my tutorial on React onClick Event Handling with Examples.

Tại sao Onclick hoạt động trên cú nhấp chuột gấp đôi?

Điều đang xảy ra là bạn đang thêm trình nghe nhấp vào bên trong cửa sổ Nhấp vào người nghe.Vì vậy, ban đầu chỉ có cửa sổ lắng nghe cho một cú nhấp chuột.Sau đó, khi nhấp vào bất cứ nơi nào, onclick được đặt trên.Các yếu tố Redpic.you are adding the click listener inside the window click listener. So initially only the window listens for a click. Then when clicking anywhere the onclick is set on the . redPic elements.

Cách liên kết nhiều sự kiện trong một nút Nhấp vào React là gì?

Để gọi nhiều chức năng onclick trong React: Đặt onclick prop trên phần tử.Gọi các chức năng khác trong hàm xử lý sự kiện.Hàm xử lý sự kiện có thể gọi càng nhiều chức năng khác khi cần thiết.